Python bindings for FFmpeg - with complex filtering support

Related tags

Video ffmpeg-python
Overview

ffmpeg-python: Python bindings for FFmpeg

Build status

ffmpeg-python logo

Overview

There are tons of Python FFmpeg wrappers out there but they seem to lack complex filter support. ffmpeg-python works well for simple as well as complex signal graphs.

Quickstart

Flip a video horizontally:

import ffmpeg
stream = ffmpeg.input('input.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'output.mp4')
ffmpeg.run(stream)

Or if you prefer a fluent interface:

import ffmpeg
(
    ffmpeg
    .input('input.mp4')
    .hflip()
    .output('output.mp4')
    .run()
)

API reference

Complex filter graphs

FFmpeg is extremely powerful, but its command-line interface gets really complicated rather quickly - especially when working with signal graphs and doing anything more than trivial.

Take for example a signal graph that looks like this:

Signal graph

The corresponding command-line arguments are pretty gnarly:

ffmpeg -i input.mp4 -i overlay.png -filter_complex "[0]trim=start_frame=10:end_frame=20[v0];\
    [0]trim=start_frame=30:end_frame=40[v1];[v0][v1]concat=n=2[v2];[1]hflip[v3];\
    [v2][v3]overlay=eof_action=repeat[v4];[v4]drawbox=50:50:120:120:red:t=5[v5]"\
    -map [v5] output.mp4

Maybe this looks great to you, but if you're not an FFmpeg command-line expert, it probably looks alien.

If you're like me and find Python to be powerful and readable, it's easier with ffmpeg-python:

import ffmpeg

in_file = ffmpeg.input('input.mp4')
overlay_file = ffmpeg.input('overlay.png')
(
    ffmpeg
    .concat(
        in_file.trim(start_frame=10, end_frame=20),
        in_file.trim(start_frame=30, end_frame=40),
    )
    .overlay(overlay_file.hflip())
    .drawbox(50, 50, 120, 120, color='red', thickness=5)
    .output('out.mp4')
    .run()
)

ffmpeg-python takes care of running ffmpeg with the command-line arguments that correspond to the above filter diagram, in familiar Python terms.

Screenshot

Real-world signal graphs can get a heck of a lot more complex, but ffmpeg-python handles arbitrarily large (directed-acyclic) signal graphs.

Installation

The latest version of ffmpeg-python can be acquired via a typical pip install:

pip install ffmpeg-python

Or the source can be cloned and installed from locally:

git clone [email protected]:kkroening/ffmpeg-python.git
pip install -e ./ffmpeg-python

Examples

When in doubt, take a look at the examples to see if there's something that's close to whatever you're trying to do.

Here are a few:

jupyter demo

deep dream streaming

See the Examples README for additional examples.

Custom Filters

Don't see the filter you're looking for? While ffmpeg-python includes shorthand notation for some of the most commonly used filters (such as concat), all filters can be referenced via the .filter operator:

stream = ffmpeg.input('dummy.mp4')
stream = ffmpeg.filter(stream, 'fps', fps=25, round='up')
stream = ffmpeg.output(stream, 'dummy2.mp4')
ffmpeg.run(stream)

Or fluently:

(
    ffmpeg
    .input('dummy.mp4')
    .filter('fps', fps=25, round='up')
    .output('dummy2.mp4')
    .run()
)

Special option names:

Arguments with special names such as -qscale:v (variable bitrate), -b:v (constant bitrate), etc. can be specified as a keyword-args dictionary as follows:

(
    ffmpeg
    .input('in.mp4')
    .output('out.mp4', **{'qscale:v': 3})
    .run()
)

Multiple inputs:

Filters that take multiple input streams can be used by passing the input streams as an array to ffmpeg.filter:

main = ffmpeg.input('main.mp4')
logo = ffmpeg.input('logo.png')
(
    ffmpeg
    .filter([main, logo], 'overlay', 10, 10)
    .output('out.mp4')
    .run()
)

Multiple outputs:

Filters that produce multiple outputs can be used with .filter_multi_output:

split = (
    ffmpeg
    .input('in.mp4')
    .filter_multi_output('split')  # or `.split()`
)
(
    ffmpeg
    .concat(split[0], split[1].reverse())
    .output('out.mp4')
    .run()
)

(In this particular case, .split() is the equivalent shorthand, but the general approach works for other multi-output filters)

String expressions:

Expressions to be interpreted by ffmpeg can be included as string parameters and reference any special ffmpeg variable names:

(
    ffmpeg
    .input('in.mp4')
    .filter('crop', 'in_w-2*10', 'in_h-2*20')
    .input('out.mp4')
)

When in doubt, refer to the existing filters, examples, and/or the official ffmpeg documentation.

Frequently asked questions

Why do I get an import/attribute/etc. error from import ffmpeg?

Make sure you ran pip install ffmpeg-python and not pip install ffmpeg or pip install python-ffmpeg.

Why did my audio stream get dropped?

Some ffmpeg filters drop audio streams, and care must be taken to preserve the audio in the final output. The .audio and .video operators can be used to reference the audio/video portions of a stream so that they can be processed separately and then re-combined later in the pipeline.

This dilemma is intrinsic to ffmpeg, and ffmpeg-python tries to stay out of the way while users may refer to the official ffmpeg documentation as to why certain filters drop audio.

As usual, take a look at the examples (Audio/video pipeline in particular).

How can I find out the used command line arguments?

You can run stream.get_args() before stream.run() to retrieve the command line arguments that will be passed to ffmpeg. You can also run stream.compile() that also includes the ffmpeg executable as the first argument.

How do I do XYZ?

Take a look at each of the links in the Additional Resources section at the end of this README. If you look everywhere and can't find what you're looking for and have a question that may be relevant to other users, you may open an issue asking how to do it, while providing a thorough explanation of what you're trying to do and what you've tried so far.

Issues not directly related to ffmpeg-python or issues asking others to write your code for you or how to do the work of solving a complex signal processing problem for you that's not relevant to other users will be closed.

That said, we hope to continue improving our documentation and provide a community of support for people using ffmpeg-python to do cool and exciting things.

Contributing

ffmpeg-python logo

One of the best things you can do to help make ffmpeg-python better is to answer open questions in the issue tracker. The questions that are answered will be tagged and incorporated into the documentation, examples, and other learning resources.

If you notice things that could be better in the documentation or overall development experience, please say so in the issue tracker. And of course, feel free to report any bugs or submit feature requests.

Pull requests are welcome as well, but it wouldn't hurt to touch base in the issue tracker or hop on the Matrix chat channel first.

Anyone who fixes any of the open bugs or implements requested enhancements is a hero, but changes should include passing tests.

Running tests

git clone [email protected]:kkroening/ffmpeg-python.git
cd ffmpeg-python
virtualenv venv
. venv/bin/activate  # (OS X / Linux)
venv\bin\activate    # (Windows)
pip install -e .[dev]
pytest

Special thanks

Additional Resources

Comments
  • exr's to mov only reads one frame

    exr's to mov only reads one frame

    Ive given the tool a folder to a number of EXR's numbered with the following convention something_something_something.1765700.exr these sequence goes from say 1765506 to 1765719

    but the tool only reads ONE frame and even says the stream is reading just one frame code is as follows

    stream = ffmpeg.input('path to the first exr', framerate=25, patter_type='glob') stream = ffmpeg.output(stream, 'test.mp4') ffmpeg.run(stream)

    but i only get one frame

    [exr_pipe @ 0x7ff484801200] Stream #0: not enough frames to estimate rate; consider increasing probesize Input #0, exr_pipe, from '/Volumes/FBH/_output/internal/to_vfx_editorial/EXR/0001_F301C013_180126_R0DQ/F301C013_180126_R0DQ.1765506.exr': Duration: N/A, bitrate: N/A Stream #0:0: Video: exr, rgb48le, 2048x967 [SAR 1:1 DAR 2048:967], 24 tbr, 24 tbn, 24 tbc Stream mapping: Stream #0:0 -> #0:0 (exr (native) -> mpeg4 (native)) Press [q] to stop, [?] for help Output #0, mp4, to 'flip.mp4': Metadata: encoder : Lavf58.18.100 Stream #0:0: Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 2048x967 [SAR 1:1 DAR 2048:967], q=2-31, 200 kb/s, 24 fps, 12288 tbn, 24 tbc Metadata: encoder : Lavc58.27.101 mpeg4 Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 frame= 1 fps=0.0 q=7.5 Lsize= 76kB time=00:00:00.00 bitrate=7677234.6kbits/s speed=0.000746x
    video:75kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.114797% [Finished in 3.1s]

    opened by Shaunimsorry 19
  • Audio Support

    Audio Support

    I have used filter_complex on an video as below, but the audio stream is lost. I would like to be able to adjust the audio and video playback rate, suggestions?

    import ffmpeg stream = ffmpeg.input('input.mp4') stream = ffmpeg.filter_(stream, 'fps', fps=20) stream = ffmpeg.filter_(stream, 'crop', 'iw*.63:ih*.63:iw-(iw*.64):ih-(ih*.833)') stream = ffmpeg.filter_(stream, 'setpts', '0.8333334*PTS') stream = ffmpeg.output(stream, 'output.mp4') ffmpeg.run(stream)

    With ffmpeg I can mux back in the audio (also with a speedup); -filter_complex 'crop=iw*.63:ih*.63:iw-(iw*.64):ih-(ih*.833)[vid];[vid]fps=20[vid2];[vid2]setpts=0.8333334*PTS[v];[0:a]atempo=1.2[a]' -map '[v]' -map '[a]'

    bug 
    opened by RGuilfoyle 18
  • Brainstorming on how to implement the split filter (or other variable multiple-output filters)

    Brainstorming on how to implement the split filter (or other variable multiple-output filters)

    I was gonna need split but noticed it's not implemented yet. I was wondering how we could do that. Maybe some new filter_multi_o(parent, name, number_of_outputs, *a, **kw) function that will return a list/tuple of number_of_outputs nodes, with a wrapper named split.

    What do you think?

    opened by depau 17
  • Add a way to pass arbitrary arguments to ffmpeg.run()

    Add a way to pass arbitrary arguments to ffmpeg.run()

    Great work!

    I'd like to pass -loglevel quiet to ffmpeg.run. I've tried this but it fails:

    >>> stream = ffmpeg.nodes.GlobalNode(stream, 'loglevel', 'quiet')
    >>> ffmpeg.run(stream)
    AssertionError: Unsupported global node: loglevel(quiet)
    

    I've used ffmpeg.run(stream, cmd=['ffmpeg', '-loglevel', 'quiet']) as a workaround, but it looks like GlobalNode is very restricted. Also multiple GlobalNode can't be chained.

    enhancement 
    opened by elelayan 15
  • Simple stream selection?

    Simple stream selection?

    I'm trying to do some simple stream selection. Using ffmpeg directly, I'd use the map option. However, when trying to do this using ffmpeg-python, I can't seem to get it correct. The map argument is getting put into a bracket, which doesn't work.

    >>> import ffmpeg
    >>> infile = ffmpeg.input('test.mkv')
    >>> stream = infile['1']
    >>> outfile = ffmpeg.output(stream, 'test-out.mkv')
    >>> ffmpeg.compile(outfile)
    ['ffmpeg', '-i', 'test.mkv', '-map', '[0:1]', 'test-out.mkv']
    

    This fails with the error Output with label '0:1' does not exist in any defined filter graph, or was already used elsewhere.

    What is the proper way to do stream selection when you don't need complex video graphs?

    bug 
    opened by whichken 14
  • Unclear way to specify output file parameters

    Unclear way to specify output file parameters

    Hi, I'm noticing that there's no clear way to specify how the output formats should be specified. I need apply some filters to different streams (scale them) and output multiple formats at the same time.

    I need to specify the output codecs and quality parameters, and I'm uncertain on how that can be done.

    opened by depau 12
  • Outgoing edges of nodes should be sorted based on when a call `.stream()` created them

    Outgoing edges of nodes should be sorted based on when a call `.stream()` created them

    i = ffmpeg.input("f1.mp4")
    ref = ffmpeg.input("f2.mp4")
    # BTW `filter_multi_output` is not in __all__, needs #65
    s2ref = ffmpeg.filter_([i, ref], "scale2ref").node
    scaled = s2ref[0]
    ref2 = s2ref[1]
    

    https://ffmpeg.org/ffmpeg-all.html#scale2ref

    Screenshot_from_2018-01-26_14-33-23.png

    You would expect the output of scale2ref labeled 0 (scaled) to be the first output of scale2ref (because .stream() was called first), and 1 (ref2) to be the second. However, this doesn't always happen: it's totally up to topo_sort().

    I'll try to fix it and send a PR.

    bug 
    opened by depau 10
  • complex filter only?

    complex filter only?

    Hi!

    First, this is a great project for compose complex filter graph.

    For my current use (generating thumbnail from video) the project does not support option like -ss or -vf ( I was doing -vf 'select=eq(n/,999) or -ss '55.00''

    the filter_() methods seems to output complex filter only?

    opened by dshlai 10
  • Add support for multi-output filters; implement `split` filter

    Add support for multi-output filters; implement `split` filter

    The split operator now does the right thing:

    import ffmpeg
    
    overlay_file = ffmpeg.input('overlay.png')
    split = (ffmpeg
        .input('input.mp4')
        .hflip()
        .split()
    )
    (ffmpeg
        .concat(
            split[0].vflip(),
            split[1]
        )
        .output('out.mp4')
    )
    
    screen shot 2017-07-06 at 3 55 28 am

    This paves the way to having both multi-input and multi-output components. To access particular outputs of a multi-output node, use either the .stream function or bracket shorthand:

    split = in.split()
    split0 = split.stream(0)
    split1 = split[1]
    

    I decided to forego the automatic split stuff for now. It was probably more work to add multi-output support right away, but I think it's more correct in the long run. The automatic splitting will eventually happen as a pre-processing step and produce the same kind of graph as though the split were inserted manually.

    opened by kkroening 9
  • Replace

    Replace "filter_" with something that tries to resolve the filter automatically

    I think we could change the way the module works by getting somewhere the list of available filters and mapping them manually to a catch-all callable that that generates filter args automatically.

    I haven't tried doing it already because there are some things to discuss, like how to distinguish single-input filters from multi-input, and how to decide whether a filter is acceptable or not.

    opened by depau 9
  • Support non-Python characters in node arguments

    Support non-Python characters in node arguments

    I am new to this great project and am very much enjoying the ease of use, especially the complex filtering api. However, it is unclear to me how to multiplex multiple inputs as so: ffmpeg -i audio.m4a -i video.mp4 -c:v libx264 -c:a aac output.mp4 Is this possible with this library?

    enhancement 
    opened by capbert 8
  • How to merge a sequence of audio_frame(numpy.ndarray) to a audio stream?

    How to merge a sequence of audio_frame(numpy.ndarray) to a audio stream?

    Hi, Thanks for your great work first.

    I have some audio frames and video frames. They are divided based on fps. Each audio frame corresponds to a video frame. I want to fuse each frame of audio with each frame of video. How can I do this?

    Looking forward to your reply, Thanks again.

    opened by Baiyixuan1113 1
  • fix(sec): upgrade py to 1.10.0

    fix(sec): upgrade py to 1.10.0

    What happened?

    There are 1 security vulnerabilities found in py 1.8.0

    What did I do?

    Upgrade py from 1.8.0 to 1.10.0 for vulnerability fix

    What did you expect to happen?

    Ideally, no insecure libs should be used.

    The specification of the pull request

    PR Specification from OSCS

    opened by chncaption 0
  • How to hide ffmpeg's console output?

    How to hide ffmpeg's console output?

    Hi, I'm using pytube and ffmpeg-python.

    When I try to merge audio and video that comes from pytube, ffmpeg pops up a console. Is there any way to hide it? Thanks in advance.

    I use this: ffmpeg.output(audio_part, video_part, path).run(overwrite_output=True)

    opened by duruburak 6
  • KeyError: 'nb_frames'

    KeyError: 'nb_frames'

    Hi, I am trying to get the number of frames in a video. It does not have a nb_frames meta data.

    I saw that ffprobe is able to do this via this method

    ffprobe -v error -select_streams v:0 -count_packets \
        -show_entries stream=nb_read_packets -of csv=p=0 input.mp4
    

    What I am currently doing is this

        info = ffmpeg.probe(file_path)
        print(info)
        total_frames = int(info["streams"][0]["nb_frames"])
    

    How would I rewrite my ffmpeg.probe(file_path, args={}) to change the input to the ffprobe command I have, as I have tried something like this with no avail

                total_frames = ffmpeg.probe(file_path, v='error', select_streams='v:0', count_packets=True, show_entries=True, stream='nb_read_packets', of=True, csv='p=0')
    

    This errors out with

    b"Failed to set value 'p=0' for option 'csv': Option not found\n"
    
    
    opened by nadermx 0
  • Can't read byte data from io

    Can't read byte data from io

    ffmpeg version - ffmpeg version 4.3.2

    Trying to use example from stackoverflow https://stackoverflow.com/questions/67877611/passing-bytes-to-ffmpeg-in-python-with-io#:~:text=import%20subprocess%20as,bytes_io_png)%0Aimg.show() but then change duration from 1 to 10 it not work and write an error

    Output exceeds the [size limit](command:workbench.action.openSettings?%5B%22notebook.output.textLineLimit%22%5D). Open the full output data[ in a text editor](command:workbench.action.openLargeOutput?25bcdb15-2e2b-45ed-b085-14d79b0ead7c)
    ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
      built with gcc 10.3.0 (GCC)
      configuration: --prefix=/opt/conda/envs/torchok --cc=/home/conda/feedstock_root/build_artifacts/ffmpeg_1645955405450/_build_env/bin/x86_64-conda-linux-gnu-cc --disable-doc --disable-openssl --enable-avresample --enable-gnutls --enable-gpl --enable-hardcoded-tables --enable-libfreetype --enable-libopenh264 --enable-libx264 --enable-pic --enable-pthreads --enable-shared --disable-static --enable-version3 --enable-zlib --enable-libmp3lame --pkg-config=/home/conda/feedstock_root/build_artifacts/ffmpeg_1645955405450/_build_env/bin/pkg-config
      libavutil      56. 51.100 / 56. 51.100
      libavcodec     58. 91.100 / 58. 91.100
      libavformat    58. 45.100 / 58. 45.100
      libavdevice    58. 10.100 / 58. 10.100
      libavfilter     7. 85.100 /  7. 85.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  7.100 /  5.  7.100
      libswresample   3.  7.100 /  3.  7.100
      libpostproc    55.  7.100 / 55.  7.100
    Input #0, lavfi, from 'testsrc=size=224x224:rate=1:duration=10':
      Duration: N/A, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 224x224 [SAR 1:1 DAR 1:1], 1 fps, 1 tbr, 1 tbn, 1 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (rawvideo (native) -> gif (native))
    Press [q] to stop, [?] for help
    Output #0, gif, to 'tmp.gif':
      Metadata:
        encoder         : Lavf58.45.100
        Stream #0:0: Video: gif, bgr8, 224x224 [SAR 1:1 DAR 1:1], q=2-31, 200 kb/s, 1 fps, 100 tbn, 1 tbc
        Metadata:
          encoder         : Lavc58.91.100 gif
    [Parsed_testsrc_0 @ 0x55c0f2851040] EOF timestamp not reliable
    ...
      libswscale      5.  7.100 /  5.  7.100
      libswresample   3.  7.100 /  3.  7.100
      libpostproc    55.  7.100 / 55.  7.100
    pipe:: Input/output error
    

    Also i can't read my own gif or mp4 with this code, have the same error. Code:

    import subprocess as sp
    import shlex
    from PIL import Image
    from io import BytesIO
    
    
    bytes_io = open('mek.gif', "rb")
    bytes_io.seek(0)
    
    ffmpeg = 'ffmpeg'
    
    cmd = [ffmpeg,
           '-i', 'pipe:',
           #'-vsync', '0',
           '-f', 'image2pipe',
           '-pix_fmt', 'rgba',
           '-vcodec', 'png',
           '-report',
           'pipe:']
    
    proc = sp.Popen(cmd, stdout=sp.PIPE, stdin=sp.PIPE, bufsize=10**8)
    out = proc.communicate(input=bytes_io.read())[0]
    
    proc.wait()
    
    bytes_io_png = BytesIO(out)
    bytes_io_png.read()
    

    Output:

    ffmpeg started on 2022-12-11 at 09:32:17
    Report written to "ffmpeg-20221211-093217.log"
    Log level: 48
    ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
      built with gcc 10.3.0 (GCC)
      configuration: --prefix=/opt/conda/envs/torchok --cc=/home/conda/feedstock_root/build_artifacts/ffmpeg_1645955405450/_build_env/bin/x86_64-conda-linux-gnu-cc --disable-doc --disable-openssl --enable-avresample --enable-gnutls --enable-gpl --enable-hardcoded-tables --enable-libfreetype --enable-libopenh264 --enable-libx264 --enable-pic --enable-pthreads --enable-shared --disable-static --enable-version3 --enable-zlib --enable-libmp3lame --pkg-config=/home/conda/feedstock_root/build_artifacts/ffmpeg_1645955405450/_build_env/bin/pkg-config
      libavutil      56. 51.100 / 56. 51.100
      libavcodec     58. 91.100 / 58. 91.100
      libavformat    58. 45.100 / 58. 45.100
      libavdevice    58. 10.100 / 58. 10.100
      libavfilter     7. 85.100 /  7. 85.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  7.100 /  5.  7.100
      libswresample   3.  7.100 /  3.  7.100
      libpostproc    55.  7.100 / 55.  7.100
    pipe:: Input/output error
    b''
    

    So it return empty bytes.

    Also i trying to use the code https://github.com/kkroening/ffmpeg-python/issues/156#:~:text=First%20of%20all,decode(%27utf%2D8%27)) from #156 issue it also return empty statistics about the video.

    But with read from disk everything work fine.

    So the question is, does the ffmpeg work with bytes? If yes please share the code example with reading from bytes, which obtained not from ffmpeg example

    opened by PososikTeam 0
Owner
Karl Kroening
Karl Kroening
Stream music with ffmpeg and python

youtube-stream Stream music with ffmpeg and python original Usage set the KEY in stream.sh run server.py run stream.sh (You can use Git bash or WSL in

Giyoung Ryu 14 Nov 17, 2021
Python based script to operate FFMPEG.

FMPConvert Python based script to operate FFMPEG. Ver 1.0 -- 2022.02.08 Feature ✅ Maximum compatibility: Third-party dependency libraries unused ✅ Che

cybern000b 1 Feb 28, 2022
A Telegram bot to convert videos into x265/x264 format via ffmpeg.

Video Encoder Bot A Telegram bot to convert videos into x265/x264 format via ffmpeg. Configuration Add values in environment variables or add them in

Adnan Ahmad 82 Jan 3, 2023
A tool to fuck a video/audio quality using FFmpeg

Media quality fucker A tool to fuck a video/audio quality using FFmpeg How to use Download the source Download Python Extract FFmpeg Put what you want

Maizena 8 Jan 25, 2022
PyAV is a Pythonic binding for the FFmpeg libraries.

PyAV is a Pythonic binding for the FFmpeg libraries. We aim to provide all of the power and control of the underlying library, but manage the gritty details as much as possible.

PyAV 1.8k Jan 1, 2023
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

null 14 Oct 28, 2022
A Telegram bot to convert videos into x265/x264 format via ffmpeg.

Video Encoder Bot A Telegram bot to convert videos into x265/x264 format via ffmpeg. Configuration Add values in environment variables or add them in

null 1 Mar 8, 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 4, 2022
A GUI based glitch tool that uses FFMPEG to create motion interpolated glitches in your videos.

FF Dissolve Glitch This is a GUI based glitch tool that uses FFmpeg to create awesome and wierd motion interpolated glitches in videos. I call it FF d

Akash Bora 19 Nov 10, 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
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
A Python media index

pyvideo https://pyvideo.org is simply an index of Python-related media records. The raw data being used here comes out of the pyvideo/data repo. Befor

pyvideo 235 Dec 24, 2022
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
Python Script for Streaming YouTube Videos in VLC Media Player.

Short Description Use this Simple Script to stream YouTube Video to VLC

Sijey 6 May 27, 2021
A python generator that converts youtube videos to ascii art in your console.

Video To ASCII A python generator that converts youtube videos to ascii art in your console. This has not been tested for windows! Example Normal mode

Julian Jones 24 Nov 2, 2022
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
Python retagging utility for mkv files using mkvmerge.

pyretag A python script to retag mkv files. Setting Up pip install pyfiglet pip install rich Move the mkv files to input folder.

null 25 Dec 4, 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