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)

camKapture is an open source application that allows users to access their webcam device and take pictures or create videos.

camKapture is an open source application that allows users to access their webcam device and take pictures or create videos.

manoj 1 Jun 21, 2022
Examples of usage of GStreamer hlssink3 plugin.

Examples of usage of GStreamer hlssink3 plugin.

Rafael Carício 2 Aug 03, 2022
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
Convert lecture videos to slides in one line. Takes an input of a directory containing your lecture videos and outputs a directory containing .PDF files containing the slides of each lecture.

Convert lecture videos to slides in one line. Takes an input of a directory containing your lecture videos and outputs a directory containing .PDF files containing the slides of each lecture.

Sidharth Anand 12 Sep 10, 2022
Image and video quality assessment

CenseoQoE: 视觉感知画质评价框架 项目介绍 图像/视频在编解码、传输和显示等过程中难免引入不同类型/程度的失真导致图像质量下降。图像/视频质量评价(IVQA)的研究目标是希望模仿人类视觉感知系统, 通过算法评估图片/视频在终端用户的眼中画质主观体验的好坏,目前在视频编解码、画质增强、画质监。

Tencent 133 Dec 20, 2022
Code from the 2021 Signal Video Superclass

Twilio Video Demo This is the code written during the live Twilio Video demo during Twilio's Signal 2021 Superclass. It creates a simple Video applica

2 Oct 21, 2021
A project that uses optical flow and machine learning to detect aimhacking in video clips.

waldo-anticheat A project that aims to use optical flow and machine learning to visually detect cheating or hacking in video clips from fps games. Che

RicanSamurai 542 Dec 03, 2022
720p FPGA Media Player (RISC-V + Motion JPEG + SD + HDMI on an Artix 7)

FPGA Media Player This project is a FPGA based media player which is capable of playing Motion JPEG encoded video over HDMI or VGA on commonly availab

179 Dec 02, 2022
Jio TV Server - Watch TV right from your laptop

Jio-PyServer Jio TV - Python Server Watch TV right from your laptop! Requirements: Python 3.X Internet Access A Jio Account Known Issues: Channel Stre

Elvis Tony 11 Apr 05, 2022
A simple Python Youtube Wachtime for YTbebot

Simple bot that was development in python 3.7, that automatically watch youtube videos. It can be used to give more views in your channel helping in the spread and increase the followers because your

Rian eka wiratma 1 Dec 05, 2021
Uncompress DEFLATE streams in pure Python

stream-deflate Uncompress DEFLATE streams in pure Python. Work in progress. This README serves as a rough design spec. Installation pip install stream

Michal Charemza 7 Oct 13, 2022
Video Translation Into Text

2021/12/9 The project has been updated Added a home screen Just drag it onto the screen The final results \ 2021/12/9 项目已更新 添加了主界面 拖到即可 最后结果 \ Using t

10 Mar 12, 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
Home Assistant custom component for viewing IP cameras RTSP stream in real time using WebRTC technology

WebRTC Camera Home Assistant custom component for viewing IP cameras RTSP stream in real time using WebRTC technology. Based on: Pion - pure Go implem

Alex X 739 Dec 30, 2022
Media player custom component which works with MQTT.

Media player custom component which works with MQTT. I designed this to specifically work with a ESP32 which i used to control a speakercraft amp.

2 Feb 10, 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
A wrapper around ffmpeg to make it work in a concurrent and memory-buffered fashion.

Media Fixer Have you ever had a film or TV show that your TV wasn't able to play its audio? Well this program is for you. Media Fixer is a program whi

Halit Şimşek 3 May 04, 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 01, 2023
Script simples para baixar vídeos/áudios/playlist do YouTube

🔗 VilelaTube ▶️ Script simples para baixar vídeos/áudios/playlist do YouTube Requisitos • Como usar • Melhorias futuras ⚠️ Atenção! ⚠️ Lembre-se de a

João Victor Vilela dos Santos 2 Nov 03, 2021
MPV remote controller is a program for remote controlling mpv player with device in your local network through web browser.

MPV remote controller is a program for remote controlling mpv player with device in your local network through web browser.

5 May 26, 2022