A Python package for running an FFmpeg command & showing better progress info - percentage progress, a progress bar and ETA.
Better FFmpeg Progress
Runs an FFmpeg command and shows a progress bar with percentage progress, time elapsed and ETA.The Rich library is used for the progress bar by default, tqdm will be used if you pass use_tqdm=True to the run method.
FFmpeg outputs something like:
frame= 692 fps= 58 q=28.0 size= 5376KiB time=00:00:28.77 bitrate=1530.3kbits/s speed=2.43x Better FFmpeg Progress outputs something like: โ Processing abc.webm โโโโโโโโโโบโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 23% 0:00:04 00:15 Where: Processing abc.webmis the description of the progresss bar.23%is the percentage progress.0:00:04is the time elapsed.00:15is the estimated time until the FFmpeg process completes.
Installation
pip install better-ffmpeg-progress --upgrade
Usage
Create an instance of theFfmpegProcess class and supply a list of arguments like you would to subprocess.run() or subprocess.Popen().
Example:
from betterffmpegprogress import FfmpegProcess, FfmpegProcessError
command = [ "ffmpeg", "-i", "https://media.xiph.org/video/derf/y4m/duckstakeoff_1080p50.y4m", "-map", "0:V", "-c:V", "libx264", "-preset", "ultrafast", "-f", "null", "-", ]
try: process = FfmpegProcess(command) # Uncomment the line below if you want to use tqdm instead of rich for the progress bar # process.use_tqdm = True
process.run() except FfmpegProcessError as e: print(f"An error occurred when running the better-ffmpeg-process package:\n{e}")
Optional Arguments
An instance of theFfmpegProcess class takes the following optional arguments:
ffmpegloglevel- Desired FFmpeg log level. Default:"verbose"ffmpeglogfile- The filepath to save the FFmpeg log to. Default:<input filename>_log.txtprintdetectedduration- Print the detected duration of the input file. Default:Falseprintstderrnew_line- If better progress information cannot be shown, print FFmpeg stderr in a new line instead of replacing the current line in the terminal. Default:False
run method takes the following optional arguments:
print_command- Print the FFmpeg command being executed. Default:False