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)

Convert Video Files To Text And Audio

Video-To-Text Convert Video Files To Text And Audio Convert To Audio 1: open dvtt folder in cmd 2: run this command in cmd = main.py Audio Convert To

Delta Inc. 2 Dec 05, 2021
Simple VLC-based media player that can play multiple videos at the same time

Screenshots About Simple VLC-based media player that can play multiple videos at the same time. You can play as many videos as you like, the only limi

161 Jan 05, 2023
Video processing routines for SciPy

scikit-video Video Processing SciKit BETA Video processing algorithms, including I/O, quality metrics, temporal filtering, motion/object detection, mo

Alex Izvorski 119 Dec 27, 2022
A VcVideoPlayer Bot for Telegram made with 💞 By @ThePro_CoderZ

VcVideoPlayer A VcVideoPlayer Bot for Telegram made with 💞 By @Akki_ThePro Heroku Deploy The easiest way to deploy this Bot is via Heroku. License

1 Dec 06, 2021
Youtube-dislikes-adder - Add dislikes to the description of your YouTube videos.

Add number of dislikes to the description of your YouTube videos. Number of dislikes are updated if you let this function as a bot.

fluks 1 Aug 23, 2022
Add filters (background blur, etc) to your webcam on Linux.

Add filters (background blur, etc) to your webcam on Linux.

Jashandeep Sohi 480 Dec 14, 2022
A telegram bot for compressing/encoding videos in h264 format.

Video-Encoder-Bot a telegram bot for compressing/encoding videos in h264 format. Configuration Add values in environment variables or add them in conf

Weeb >.< 61 Dec 29, 2022
Python program - to extract slides from videos

Programa em Python - que fiz em algumas horas e que provavelmente tem bugs - para extrair slides de vídeos.

Natanael Antonioli 45 Nov 12, 2022
获取斗鱼&虎牙&哔哩哔哩&抖音&快手等 48 个直播平台的真实流媒体地址(直播源)和弹幕,直播源可在 PotPlayer、flv.js 等播放器中播放。

获取斗鱼&虎牙&哔哩哔哩&抖音&快手等 48 个直播平台的真实流媒体地址(直播源)和弹幕,直播源可在 PotPlayer、flv.js 等播放器中播放。

乌帮图 5.6k Jan 06, 2023
Playing videos through S3 buckets (Wasabi, AWS, etc.) through client-side VideoJS player

Playing videos through S3 buckets (Wasabi, AWS, etc.) through client-side VideoJS player without incurring ingress/egree traffic on EC2 Instance.

Syed Umar Arfeen 8 Mar 28, 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

15 Nov 10, 2022
Source files for the data lake demo video using the AWS TICKIT database

Data Lake Demo Source code for video demonstration detailed in the post, Building a Simple Data Lake on AWS . Build a simple data lake on AWS using a

Gary A. Stafford 97 Dec 23, 2022
Tweet stream in OBS browser source

OBS-Twitter-Stream OBSなどの配信ソフトのブラウザソースで特定のキーワードを含んだツイートを表示します 使い方 使い方については以下のwikiを御覧ください https://github.com/CubeZeero/OBS-Twitter-Stream/wiki ダウンロード W

Cube 23 Dec 18, 2022
Automatically logs into VTOP and can perform certain tasks

VTOP_Login Automatically logs into VTOP and can perform certain tasks To run the

Jatin 1 Jan 30, 2022
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
Automatically segment in-video YouTube sponsorships.

SponsorBlock Auto Segment [Model Download] Automatically segment in-video YouTube sponsorships. Trained on a large dataset of YouTube sponsor transcri

Akmal 7 Aug 22, 2022
A web RTSP play platform based on websocket and tornado, websocket use blob binaryType read as ArrayBuffer

A web RTSP play platform based on websocket and tornado, websocket use blob binaryType read as ArrayBuffer

2 Feb 25, 2022
Program for converting video to GIF

video-to-gif Program for converting video to GIF Install the lib: pip install moviepy Usage: Specify the path to the video file. clip = VideoFileClip(

Artem Mokin 0 Dec 13, 2021
Wonkey - an open source programming language for the creation of cross-platform video games

Wonkey Programming Language Wonkey is an open source programming language for the creation of cross-platform video games, highly inspired by the “Blit

Wonkey Coders 110 Nov 09, 2022
A simple Telegram bot to extract hard-coded subtitle from videos using FFmpeg & Tesseract.

Video Subtitle Extractor Bot A simple Telegram bot to extract hard-coded subtitle from videos using FFmpeg & Tesseract. Note that the accuracy of reco

14 Oct 28, 2022