CrypticSignal
better-ffmpeg-progress
Python

A Python package for running an FFmpeg command & showing better progress info - percentage progress, a progress bar and ETA.

Last updated Jul 4, 2026
73
Stars
16
Forks
2
Issues
0
Stars/day
Attention Score
29
Language breakdown
Python 100.0%
โ–ธ Files click to expand
README

PyPI downloads PyPI downloads PyPI - Version GitHub

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.webm is the description of the progresss bar.
  • 23% is the percentage progress.
  • 0:00:04 is the time elapsed.
  • 00:15 is the estimated time until the FFmpeg process completes.
As you can see, the output of Better FFmpeg Progress is much more useful.

Installation

pip install better-ffmpeg-progress --upgrade

Usage

Create an instance of the FfmpegProcess 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 the FfmpegProcess 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.txt
  • printdetectedduration - Print the detected duration of the input file. Default: False
  • printstderrnew_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
The run method takes the following optional arguments:
  • print_command - Print the FFmpeg command being executed. Default: False

ยฉ 2026 GitRepoTrend ยท CrypticSignal/better-ffmpeg-progress ยท Updated daily from GitHub