Python package for Near Duplicate Video Detection (Perceptual Video Hashing) - Get a 64-bit comparable hash-value for any video.

Overview

The Python package for near duplicate video detection

Build Status Build Status Build Status codecov Total alerts Language grade: Python pypi Downloads GitHub lastest commit PyPI - Python Version


⭐️ Introduction

Videohash is a Python package for detecting near-duplicate videos (Perceptual Video Hashing). It can take any input video and generate a 64-bit equivalent hash value. Videohash is way more faster than comparing the imagehash values of individual frames of the video and more reliable than hashing keyframes.

The video-hash-values for identical or near-duplicate videos are the same or similar, implying that if the video is resized (upscaled/downscaled), transcoded, watermark added/removed, stabilized, color changed, frame rate changed, changed aspect ratio, cropped, black-bars added or removed, the hash-value should remain unchanged or not vary substantially.

How the hash values are calculated

  • In layman's terms : Every one second, a frame from the input video is extracted, the frames are shrunk to a 144x144 pixel square, a collage is constructed that contains all of the resized frames(square-shaped), the collage's wavelet hash is the video hash value for the original input video.

When not to use Videohash

  • Videohash cannot be used to verify whether one video is a part of another (video fingerprinting). If the video is reversed or rotated by a substantial angle (greater than 10 degrees), Videohash will not provide the same or similar hash result, but you can always reverse the video manually and generate the hash value for reversed video.

How to compare the video hash values stored in a database


🏗 Installation

To use this software, you must have FFmpeg installed. Please read how to install FFmpeg if you don't already know how.

Install videohash

Upgrade pip

python3 -m pip install --upgrade pip

If you do not want to upgrade pip and the installation fails try appending --prefer-binary to the following installation command(s).

  • Install from the PyPi (recommended):
pip install videohash
  • Install directly from the GitHub repository (NOT recommended):
pip install git+https://github.com/akamhy/videohash.git

🌱 Features

  • It is fast!
  • Generate videohash of a video directly from its URL(uses yt-dlp) or its path.
  • Can be used as the core of a scalable Near Duplicate Video Retrieval (NDVR) system.
  • The end-user can access the image representation(the collage) of the video.
  • A videohash instance can be compared to a 64-bit stored hash, its hex representation, bitlist, and other videohash instances.

🚀 Usage

In the following usage example the first three instance of VideoHash class are computing the hash for the same video(not same as in checksum) and the last one is a different video.

>> videohash1 = VideoHash(url=url1) >>> >>> videohash1.hash # video hash value of the file, value is same as str(videohash1) '0b0011010000011111111011111111111110001111011110000000000000000000' >>> >>> #VIDEO:Artemis I Hot Fire Test >>> url2="https://raw.githubusercontent.com/akamhy/videohash/main/assets/rocket.mkv" >>> videohash2 = VideoHash(url=url2) >>> videohash2.hash '0b0011010000011111111011111111111110001111011110000000000000000000' >>> videohash2.hash_hex '0x341fefff8f780000' >>> videohash2.hash_hex '0x341fefff8f780000' >>> videohash1 - videohash2 0 >>> videohash1 == videohash2 True >>> videohash1 == "0b0011010000011111111011111111111110001111011110000000000000000000" True >>> videohash1 != videohash2 False >>> path3 = "/home/akamhy/Downloads/rocket.mkv" #VIDEO: Artemis I Hot Fire Test >>> videohash3 = VideoHash(path=path3) >>> videohash3.hash '0b0011010000011111111011111111111110001111011110000000000000000000' >>> videohash3 - videohash2 0 >>> videohash3 == videohash1 True >>> url4 = "https://www.youtube.com/watch?v=_T8cn2J13-4" #VIDEO: How We Are Going to the Moon >>> videohash4 = VideoHash(url=url4) >>> videohash4.hash_hex '0x7cffff000000eff0' >>> videohash4 - "0x7cffff000000eff0" 0 >>> videohash4.hash '0b0111110011111111111111110000000000000000000000001110111111110000' >>> videohash4 - videohash2 34 >>> videohash4 != videohash2 True">
>>> from videohash import VideoHash
>>> # video: Artemis I Hot Fire Test
>>> url1 = "https://www.youtube.com/watch?v=PapBjpzRhnA"
>>> videohash1 = VideoHash(url=url1)
>>>
>>> videohash1.hash # video hash value of the file, value is same as str(videohash1)
'0b0011010000011111111011111111111110001111011110000000000000000000'
>>>
>>> #VIDEO:Artemis I Hot Fire Test
>>> url2="https://raw.githubusercontent.com/akamhy/videohash/main/assets/rocket.mkv"
>>> videohash2 = VideoHash(url=url2)
>>> videohash2.hash
'0b0011010000011111111011111111111110001111011110000000000000000000'
>>> videohash2.hash_hex
'0x341fefff8f780000'
>>> videohash2.hash_hex
'0x341fefff8f780000'
>>> videohash1 - videohash2
0
>>> videohash1 == videohash2
True
>>> videohash1 == "0b0011010000011111111011111111111110001111011110000000000000000000"
True
>>> videohash1 != videohash2
False
>>> path3 = "/home/akamhy/Downloads/rocket.mkv" #VIDEO: Artemis I Hot Fire Test
>>> videohash3 = VideoHash(path=path3)
>>> videohash3.hash
'0b0011010000011111111011111111111110001111011110000000000000000000'
>>> videohash3 - videohash2
0
>>> videohash3 == videohash1
True
>>> url4 = "https://www.youtube.com/watch?v=_T8cn2J13-4" #VIDEO: How We Are Going to the Moon
>>> videohash4 = VideoHash(url=url4)
>>> videohash4.hash_hex
'0x7cffff000000eff0'
>>> videohash4 - "0x7cffff000000eff0"
0
>>> videohash4.hash
'0b0111110011111111111111110000000000000000000000001110111111110000'
>>> videohash4 - videohash2
34
>>> videohash4 != videohash2
True

Run the above code @ https://replit.com/@akamhy/videohash-usage-2xx-example-code-for-video-hashing#main.py

Extended Usage : https://github.com/akamhy/videohash/wiki/Extended-Usage

API Reference : https://github.com/akamhy/videohash/wiki/API-Reference


🙏 Credits


🛡 License

License: MIT

Copyright (c) 2021 Akash Mahanty. See license for details.

The VideoHash logo was created by iconolocode. See license for details.

Videos are from NASA and are in the public domain.

NASA copyright policy states that "NASA material is not protected by copyright unless noted".

Comments
  • assets host issue

    assets host issue

    https://user-images.githubusercontent.com/64683866/148959826-9b83c1ad-f9ef-4054-83df-d420ca318de6.mp4

    Translation of the Hindi langauge written in Latin alphabet/Roman alphabet into English is: The third wave of covid-19 is here Again* I will pass the tests without studying**.

    * (exams were canceled in the past year) ** (because of online tests and cheating)

    opened by akamhy 9
  • Design a vector(SVG) logo for this project

    Design a vector(SVG) logo for this project

    Please design a vector logo for this project. The logo must contain the project name 'videohash'.

    You must release the logo under the MIT License(same license as the project).

    I want the output in SVG and PNG formats. The logo must be transparent(the background) and should be professional.

    Examples of logos of some real projects that I like. The new logo can be of a similar design but MUST NOT be exactly copied.

    • https://commons.wikimedia.org/wiki/File:OpenCV_Logo_with_text_svg_version.svg
    • https://commons.wikimedia.org/wiki/File:TensorFlowLogo.svg
    • https://commons.wikimedia.org/wiki/File:NumPy_logo_2020.svg

    Both the PNG and SVG formats should be inside the assets directory in the pull request. This issue is not gonna get assigned before you open a pull request but the one I like the most is gonna be selected. Please open a pull request only if you are good at making vector logos. Thank you!

    hacktoberfest 
    opened by akamhy 8
  • BUG REPORT - MAKE  the -f worst optional

    BUG REPORT - MAKE the -f worst optional

    Describe the bug The download fails on reddit.

    To Reproduce less than or equal to v2.1.7

    Python 3.9.0 (default, Oct 21 2021, 15:27:22) 
    [GCC 10.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> url1 = "https://www.reddit.com/r/IndianDankMemes/comments/rn2yxa/ha_bhai_normi_hu_mai/"
    >>> from videohash import VideoHash
    >>> url1 = "https://www.reddit.com/r/IndianDankMemes/comments/rn2yxa/ha_bhai_normi_hu_mai/"
    >>> url2 = "https://www.reddit.com/r/IndianDankMemes/comments/rmw1o9/i_am_happy_i_am_happy_i_am_happi_today/"
    >>> videohash1 = VideoHash(url=url1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/akamhy/projects/benchmark_videohash/venv/lib/python3.9/site-packages/videohash/videohash.py", line 85, in __init__
        self._copy_video_to_video_dir()
      File "/home/akamhy/projects/benchmark_videohash/venv/lib/python3.9/site-packages/videohash/videohash.py", line 288, in _copy_video_to_video_dir
        Download(
      File "/home/akamhy/projects/benchmark_videohash/venv/lib/python3.9/site-packages/videohash/downloader.py", line 51, in __init__
        self.download_video()
      File "/home/akamhy/projects/benchmark_videohash/venv/lib/python3.9/site-packages/videohash/downloader.py", line 85, in download_video
        raise DownloadFailed(
    videohash.exceptions.DownloadFailed: '/home/akamhy/projects/benchmark_videohash/venv/bin/yt-dlp' failed to download the video at 'https://www.reddit.com/r/IndianDankMemes/comments/rn2yxa/ha_bhai_normi_hu_mai/'.
    [Reddit] rn2yxa: Downloading JSON metadata
    [Reddit] rn2yxa: Downloading m3u8 information
    [Reddit] rn2yxa: Downloading MPD manifest
    
    ERROR: [Reddit] k4nqp99cdc781: Requested format is not available
    
    >>> videohash1 = VideoHash(url=url1, download_worst=False)
    >>> videohash2 = VideoHash(url=url2, download_worst=False)
    >>> videohash1 - videohash2
    4
    >>> 
    
    

    Expected behavior Download the video without any extra arguments.

    Please complete the following information:

    • Operating system: NA
    • Python Version: NA
    • VideoHash version: NA

    Additional context I don't use Reddit but a friend of mine was using videohash to search posts by templates. Both the URLs use the same template.

    • https://www.reddit.com/r/IndianDankMemes/comments/rn2yxa/ha_bhai_normi_hu_mai/
    • https://www.reddit.com/r/IndianDankMemes/comments/rmw1o9/i_am_happy_i_am_happy_i_am_happi_today/
    bug 
    opened by akamhy 5
  • Write FFmpeg installer for windows in Python 3 (should try if you are good at writing installer for windows)

    Write FFmpeg installer for windows in Python 3 (should try if you are good at writing installer for windows)

    If you are good at Python please write a script that would download the latest FFmpeg from https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z

    Uncompress the archive.

    Copy the bin directory from the decompressed folder, and paste inside C:\Program Files\ffmpeg.

    Add C:\Program Files\ffmpeg\bin\ to the Environment Variables.

    See https://github.com/akamhy/videohash/wiki/Install-FFmpeg,-but-how%3F#install-ffmpeg-on-windows.

    I've written a script for testing on windows, you may find it useful. Link : https://github.com/akamhy/videohash/blob/main/assets/windows_ffmpeg_downloader_at_cwd.py

    help wanted 
    opened by akamhy 5
  • Improve grammar and fix typo

    Improve grammar and fix typo

    I am a non-native speaker and I suck at formal grammar. If you are a native speaker or just good at writing doc strings/comments/copy editing please open a pull request. Language must be formal, don't add any jokes or slang.

    Thank you!

    hacktoberfest 
    opened by akamhy 4
  • Long Video might fail to maketile due to the jpeg format

    Long Video might fail to maketile due to the jpeg format

    Problem: When I try to get the hash of a long video (about 90 min), it turns out errors when making tile: "encoder error -2 when writing image file" and "Maximum supported image dimension is 65500 pixels".

    My solution now: Instead of just changing the frame_interval to shorten the width, I found that it might be a limit of the jpeg format. So the solution I am using is to change the default output of the function "make_tile" in "tilemaker.py" to png format: save_tiles(tiles, prefix="tile", directory=tiles_dir, file_format="png")

    Suggestion: Now, there is no error. However, I am not sure if this will affect the hash value (as generated with jpeg format), or if any confilct to any part of this lib. As I notice the default parameter of "file_format" in th function "save_tiles" is already png, I am confused why the jpeg format is explictly given in the function "make_tile". If there is no other problem, maybe using png as the default in "make_tile" is better considering some long videos?

    Thank you!

    bug 
    opened by runck 3
  • BUG REPORT

    BUG REPORT

    Describe the bug Hash collision for some videos of same length

    To Reproduce

    v1 = VideoHash(url="https://canvaz.scdn.co/upload/artist/3PhoLpVuITZKcymswpck5b/video/5e966e9c01f147cdae93a02c61a4bf7c.cnvs.mp4")
    v2 = VideoHash(url="https://canvaz.scdn.co/upload/licensor/7JGwF0zhX9oItt9901OvB5/video/dc047df48f774d1590b61fd38bc082e4.cnvs.mp4")
    print(v1 == v2)
    

    Expected behavior The hash should be different but is same.

    Screenshots NA

    Please complete the following information:

    • Operating system: NA
    • Python Version: NA
    • VideoHash version: NA

    Additional context The issue can probably be resolved by extracting more features such as brightness levels or maybe the most dominant colors of frames extracted at a specific FPS. Increase the number of hash bits to accommodate more data.

    OR

    why not use colorhash + whash and change the bit site to 128( twice of 64, the current size)? They generate hash is very different ways and collisions should be highly unlikely.

    bug 
    opened by akamhy 3
  • Fix installing on Windows by specifying encoding

    Fix installing on Windows by specifying encoding

    In a windows environment, if the encoding is not specified, ASCII is expected. This creates errors when running setup.py when the README (or other files) contain emojis or other non-ascii characters. This fixes this at least for the README, not sure if there are other instances of this.

    bug 
    opened by step21 3
  • Change Frame Interval

    Change Frame Interval

    Would be great to expose access to the frame interval. I quite often work with very long or very short videos and would be great to specifiy the frame interval to check. Alternatively, be able to select a total number of frames and have it randomly select that number of frames from across the video.

    good first issue 
    opened by specky532 3
  • Video paths containing spaces break ffmpeg calls

    Video paths containing spaces break ffmpeg calls

    When using the from_path method of hashing a video, if the path to the video contains any number of spaces, it will break the ffmpeg commands given to subprocess.Popen. This is because:

    1. The paths within the command are not encapsulated by quotation marks, causing ffmpeg to interpret only the part of the path prior to the first whitespace as the target path, and the rest of the given path as additional, invalid arguments
    2. The command given to subprocess.Popen is split on spaces before being interpreted, again forcing the system to interpret different parts of the path as new arguments

    This is easily fixed by inserting escaped quotation marks around any paths in the ffmpeg commands and dropping the .split() on operation in the command and setting shell=True in Popen.

    I've taken the liberty of including the updated functions here:

    def frames(input_file, output_prefix):
        """Extract the frames of the video.
        Export frames as images at output_prefix as a 7 digit padded jpeg file.
        """
        command = "ffmpeg -i \"{input_file}\" -r 1 \"{output_prefix}_%07d.jpeg\"".format(
            input_file=input_file, output_prefix=output_prefix
        )
        process = Popen(command, shell=True, stdout=DEVNULL, stderr=STDOUT)
        output, error = process.communicate()
    
    
    def compressor(input_file, task_dir, task_uid):
        # APPLY : ffmpeg -i input.webm -s 64x64 -r 30  output.mp4
    
        output_file = join(task_dir, task_uid + "compressed.mp4")
        command = "ffmpeg -i \"{input_file}\" -s 64x64 -r 30 \"{output_file}\"".format(
            input_file=input_file, output_file=output_file
        )
        process = Popen(command, shell=True, stdout=DEVNULL, stderr=STDOUT)
        output, error = process.communicate()
    
        return output_file
    

    Hope you find this useful! Thanks for the great module!

    opened by CaileanMParker 3
  • created a module videoduration with func video_duration, videoduratio…

    created a module videoduration with func video_duration, videoduratio…

    …n attr now in VideoHash class instances and video_duration func can also be accesed directly as videohash.video_duration also added tests for the new module

    enhancement 
    opened by akamhy 2
  • Address issue with `subprocess` and `stdint`

    Address issue with `subprocess` and `stdint`

    This is main to address the issue described here: https://github.com/akamhy/videohash/issues/98

    It's mostly an issue with subprocess and ffmpeg, but videohash is susceptible to it. Let me know if you have any questions.

    I also added a bit to allow me to save the ffmpeg logs (which I needed at first to diagnose what was going on). You can keep it at your leisure, but I left it as optional.

    Thanks again for this library. It's a very good idea and I'm looking forward to experimenting more with the various results!

    opened by dale-wahl 0
  • pyhon subprocess inherits stdin by default and causes ffmpeg to fail

    pyhon subprocess inherits stdin by default and causes ffmpeg to fail

    When running videohash as part of a program that has also used subprocess it seems to inherit the stdin and that can result in various failures for ffmpeg.

    I have been documenting it here: https://github.com/digitalmethodsinitiative/4cat/pull/303#issue-1422452417 Essentially, I can use videohash alone, but not with additional subprocesses unless I edit it and provide it with stdin=subprocess.DEVNULL since the default stdin is in use.

    Sending a PR shortly with needed edit.

    bug 
    opened by dale-wahl 0
  • Hashing speed issue.

    Hashing speed issue.

    Describe the bug It takes quite a while to hash a video.

    To Reproduce

    from videohash import VideoHash
    import time
    
    start = time.time()
    
    url = 'https://user-images.githubusercontent.com/47534140/185008752-da1f09c7-a177-4a46-9c64-230744e998c1.mp4'
    v1 = VideoHash(url=url, frame_interval=12)
    
    print(f"Finished in {time.time() - start} secs")
    

    Expected behavior It should realistically be doable in under a second

    Please complete the following information:

    • Operating system: Windows 10
    • Python Version: 3.10.2
    • VideoHash version: 2.1.9

    Additional context Currently takes about 3/4 seconds

    bug 
    opened by Demmenie 0
  • Hash Collision

    Hash Collision

    Describe the bug Hash collision occurs with videos of the same length and with similar colour schemes.

    To Reproduce

    v1 = VideoHash(url='https://user-images.githubusercontent.com/47534140/185008752-da1f09c7-a177-4a46-9c64-230744e998c1.mp4')
    v2 = VideoHash(url='https://user-images.githubusercontent.com/47534140/185008748-b8922142-37cc-48a0-bad9-1385ba016587.mov')
    print (v1 == v2)
    

    Expected behavior The hashes of the videos should be different.

    Screenshots NA

    Please complete the following information:

    • Operating system: NA
    • Python Version: 3.10.5
    • VideoHash version: 3.0.1

    Additional context

    bug 
    opened by MikPisula 6
Releases(3.0.1)
  • 3.0.1(May 29, 2022)

    What's Changed

    • Tiles will now use PNG and not JPEG. jpeg has a max res limit, for longer videos it's a bug - https://github.com/akamhy/videohash/pull/92

    Full Changelog: https://github.com/akamhy/videohash/compare/3.0.0...3.0.1

    Download videohash

    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(May 17, 2022)

    What's Changed

    • Fix hash collision for videos of same length by @akamhy in https://github.com/akamhy/videohash/pull/89

    Full Changelog: https://github.com/akamhy/videohash/compare/2.1.9...3.0.0

    Download videohash

    Source code(tar.gz)
    Source code(zip)
  • 2.1.9(Feb 14, 2022)

    What's Changed

    • Fix installing on Windows by specifying encoding by @step21 in https://github.com/akamhy/videohash/pull/83

    New Contributors

    • @step21 made their first contribution in https://github.com/akamhy/videohash/pull/83

    Full Changelog: https://github.com/akamhy/videohash/compare/2.1.8...2.1.9

    Download videohash

    Source code(tar.gz)
    Source code(zip)
  • 2.1.8(Dec 24, 2021)

    What's Changed

    • BUGFIX: The default behavior to download the worst quality fails for sites like Reddit. Fix by setting download_worst = False by @akamhy in https://github.com/akamhy/videohash/pull/77

    Full Changelog: https://github.com/akamhy/videohash/compare/2.1.7...2.1.8

    Download videohash

    Source code(tar.gz)
    Source code(zip)
  • 2.1.7(Dec 23, 2021)

    What's Changed

    • Update README (added credits and useful links) by @akamhy in https://github.com/akamhy/videohash/pull/74
    • The release is only made to upload the new and more helpful readme with credits to the PyPI.

    Full Changelog: https://github.com/akamhy/videohash/compare/2.1.6...2.1.7

    Download videohash

    Source code(tar.gz)
    Source code(zip)
  • 2.1.6(Nov 29, 2021)

    What's Changed

    • Created a module videoduration with the function video_duration, video_duration attribute now available in VideoHash instances and video_duration function can also be accessed directly as videohash.video_duration. by @akamhy in https://github.com/akamhy/videohash/pull/72

    Full Changelog: https://github.com/akamhy/videohash/compare/2.1.5...2.1.6

    Source code(tar.gz)
    Source code(zip)
  • 2.1.5(Nov 28, 2021)

  • 2.1.4(Nov 11, 2021)

    • Removed youtube-dl from the dependency now the package now solely uses yt-dlp for downloading videos.
    • VideoHash now works on python 3.10 post the 3.10 wheels of SciPy.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.3(Nov 4, 2021)

    • Improved docstrings, useful for IDE/editor autocomplete.
    • FASTER: Use f-strings for String interpolation instead of c-style.
    • FASTER: Extend the rows of the wavelet hash to the instance bit list, no need to waste resources by generating the bit list from the bitstring.
    • Use yt-dlp as the default downloader, yt-dlp avoids throttling issues with YouTube.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Oct 20, 2021)

  • 2.1.1(Oct 20, 2021)

    • More type annotation
    • Avoid changing types of variables in runtime.
    • Avoid changing values of parameters of methods(they stay the same throughout their life).
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Oct 19, 2021)

    • The videohash code is now type annotated.
    • The black bars in videos are removed before calculating the videohash value.
    • The extension of the downloaded video is set to .mkv if the video lacks an extension because the Matroska container can contain all codecs.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.4(Oct 17, 2021)

  • 2.0.3(Oct 16, 2021)

    • BUGFIX: On Windows, FFmpeg and youtube-dl/yt-dlp could fail because of the space in the directory name. This issue was fixed by quoting the paths of these programs.
    • CHANGE(non-breaking): A new attribute bitlist in the VideoHash class, the attribute is python list containing the bits of the hash value.
    • CHANGE(non-breaking): The package now XOR's the bitlist instead of calculating the Hamming distance the usual way.
    • Retired Python 3.5 is no longer supported.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Oct 13, 2021)

    • All exceptions are now available directly from the videohash import. (imported exceptions in videohash/init.py).
    • Explicitly set collage_image_width=1024 in class MakeCollage, this changes nothing as it was set to 1024 while creating the object in VideoHash class.
    • shlex quote output_dir for POSIX in videohash/framesextractor.py
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Oct 11, 2021)

    • v2.0.1 is incompatible with the version one of videohash(1.x.x). Sorry!
    • The version 2 usage wavelet-hash(based on Discrete Wavelet Transformation) for hashing the image. wavelet-hash as implemented by Dmitry Petrov in the image hash library. From now on, the whash of the collage is the videohash for the video.
    • Supports both youtube-dl and yt-dlp.
    • Operators such as '-', '==' and '!=' are now supported by the VideoHash class instances. The instance can be compared with other VideoHash class objects and also python string objects of the 64-bit binary hash and its hex representation.
    • The generated collage is now accessible to the end-user and not deleted right after its use to calculate the hash. In fact, the instance doesn't delete the files created by itself unless delete_storage_path() method is called on the instance.
    Source code(tar.gz)
    Source code(zip)
  • 1.0.7(Sep 3, 2021)

  • 1.0.6(Apr 23, 2021)

    • Standardize the videos before calculating the hash.
    • It may be assumed that the standardization will increase the time to calculate the hashes but we are also decreasing the size of file by downscaling and reducing the frame rate.
    Source code(tar.gz)
    Source code(zip)
  • 1.0.5(Jan 21, 2021)

  • 1.0.4(Jan 20, 2021)

    • Make the collage as close to a square close as possible. This change decreased the hashdiff of partially similar files by 15.33%(mean), tested on 164 partially similar NASA public domain files.
    Source code(tar.gz)
    Source code(zip)
  • 1.0.3(Jan 19, 2021)

  • 1.0.2(Jan 18, 2021)

  • 1.0.1(Jan 17, 2021)

  • 1.0.0(Jan 17, 2021)

A youtube video link or id to video thumbnail python package.

Youtube-Video-Thumbnail A youtube video link or id to video thumbnail python package. Made with Python3

Fayas Noushad 10 Oct 21, 2022
Python package to display video in GUI using OpenCV-Python and PySide6

Python package to display video in GUI using OpenCV-Python and PySide6. Introduction cv2PySide6 is a package which provides utility classes and functi

null 3 Jun 6, 2022
OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality video editing and animation solutions to the world.

OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality v

OpenShot Studios, LLC 3.1k Jan 1, 2023
video streaming userbot (vsu) based on pytgcalls for streaming video trought the telegram video chat group.

VIDEO STREAM USERBOT ✨ an another telegram userbot for streaming video trought the telegram video chat. Environmental Variables ?? API_ID : Get this v

levina 6 Oct 17, 2021
MoviePy is a Python library for video editing, can read and write all the most common audio and video formats

MoviePy is a Python library for video editing: cutting, concatenations, title insertions, video compositing (a.k.a. non-linear editing), video processing, and creation of custom effects. See the gallery for some examples of use.

null 10k Jan 8, 2023
It is a simple python package to play videos in the terminal using characters as pixels

It is a simple python package to play videos in the terminal using characters as pixels

Joel Ibaceta 1.4k Jan 7, 2023
Streamlink is a CLI utility which pipes video streams from various services into a video player

Streamlink is a CLI utility which pipes video streams from various services into a video player

null 8.2k Dec 26, 2022
Text2Video's purpose is to help people create videos quickly and easily by simply typing out the video’s script and a description of images to include in the video.

Text2Video Text2Video's purpose is to help people create videos quickly and easily by simply typing out the video’s script and a description of images

Josh Chen 19 Nov 22, 2022
Filtering user-generated video content(SberZvukTechDays)Filtering user-generated video content(SberZvukTechDays)

Filtering user-generated video content(SberZvukTechDays) Table of contents General info Team members Technologies Setup Result General info This is a

Roman 6 Apr 6, 2022
Extracting frames from video and create video using frames

Extracting frames from video and create video using frames This program uses opencv library to extract the frames from video and create video from ext

null 1 Nov 19, 2021
Telegram Video Chat Video Streaming bot 🇱🇰

?? Get SESSION_NAME from below: Pyrogram ?? Preview ✨ Features Music & Video stream support MultiChat support Playlist & Queue support Skip, Pause, Re

DOOZY YEZ 5 Jun 26, 2022
Play Video & Music on Telegram Group Video Chat

?? DEMONGIRL ?? ʜᴇʟʟᴏ ❤️ ???? Join us ᴠɪᴅᴇᴏ sᴛʀᴇᴀᴍ ɪs ᴀɴ ᴀᴅᴠᴀɴᴄᴇᴅ ᴛᴇʟᴇʀᴀᴍ ʙᴏᴛ ᴛʜᴀᴛ's ᴀʟʟᴏᴡ ʏᴏᴜ ᴛᴏ ᴘʟᴀʏ ᴠɪᴅᴇᴏ & ᴍᴜsɪᴄ ᴏɴ ᴛᴇʟᴇɢʀᴀᴍ ɢʀᴏᴜᴘ ᴠɪᴅᴇᴏ ᴄʜᴀᴛ ?? ɢ

Jonathan 5 Dec 31, 2021
Takes a video as an input and creates a video which is suitable to upload on Youtube Shorts and Tik Tok (1080x1920 resolution).

Shorts-Tik-Tok-Creator Takes a video as an input and creates a video which is suitable to upload on Youtube Shorts and Tik Tok (1080x1920 resolution).

Arber Hakaj 5 Nov 9, 2022
Video-stream - A telegram video stream bot repo

This is a Telegram Video stream Bot. Binary Tech ?? Features stream videos downl

silentz lk 1 Feb 2, 2022
Terminal-Video-Player - A program that can display video in the terminal using ascii characters

Terminal-Video-Player - A program that can display video in the terminal using ascii characters

null 15 Nov 10, 2022
Python and OpenCV-based scene cut/transition detection program & library.

Video Scene Cut Detection and Analysis Tool Latest Release: v0.5.6.1 (October 11, 2021) Main Webpage: py.scenedetect.com Documentation: manual.scenede

Brandon Castellano 1.8k Jan 2, 2023
deepstream python rtsp video h264 or gstreamer python rtsp h264 | h264

deepstream python rtsp video h264 or gstreamer python rtsp h264 | h264 deepstrea

Small white Tang 6 Dec 14, 2022
High-performance cross-platform Video Processing Python framework powerpacked with unique trailblazing features :fire:

Releases | Gears | Documentation | Installation | License VidGear is a High-Performance Video Processing Python Library that provides an easy-to-use,

Abhishek Thakur 2.6k Dec 28, 2022
Python Simple Mass Video Clipper (PSMVC)

Python Simple Mass Video Clipper (PSMVC) PSMVC é um gerador de cortes via terminal construído em python. Uso Basta abrir o arquivo start.py Dependenci

Bruno 2 Oct 16, 2021