Skip to main content

Better FFmpeg Progress

Runs an FFmpeg command and shows a progress bar with percentage progress, elapsed time and ETA.

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 (5.50 MB / ~23.91 MB) ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  23% 0:00:04 00:15

Where:

  • Processing abc.webm is the description of the progresss bar. Filenames longer than 60 characters are truncated.
  • (5.50 MB / ~23.91 MB) is the current output size and the estimated final output size.
  • 23% is the percentage progress.
  • 0:00:04 is the time elapsed.
  • 00:15 is the estimated time until the FFmpeg process completes.

Installation

pip install better-ffmpeg-progress --upgrade

Usage

Create an instance of the FfmpegProcess class and supply a list of arguments like you would when using subprocess.run() or subprocess.Popen(). Example:

from better_ffmpeg_progress import FfmpegProcess, FfmpegProcessError

command = [
    "ffmpeg",
    "-i",
    "https://media.xiph.org/video/derf/y4m/ducks_take_off_1080p50.y4m",
    "-map",
    "0:V",
    "-c:V",
    "libx264",
    "-preset",
    "ultrafast",
    "-f",
    "null",
    "-",
]

try:
    process = FfmpegProcess(command)
    # Uncomment this line to use tqdm instead of Rich.
    # process.use_tqdm = True

    process.run()
except FfmpegProcessError as e:
    print(
        "An error occurred when running Better FFmpeg Progress:\n"
        f"{e}"
    )

Trimming

If your command trims the input with -ss, -sseof, -t or -to (as input or output options), the expected duration of the output is calculated automatically, so the progress bar and ETA reflect the trimmed output rather than the whole input file. This adjustment is skipped when -copyts is used.

Duration Override

By default, Better FFmpeg Progress detects the duration of the input file and uses it to calculate percentage progress and ETA.

For partial, damaged, streamed or synthetic inputs, FFmpeg may be unable to detect the duration correctly. In these cases, you can provide the duration manually using duration_override.

The value should be the duration of the input file, in seconds:

from better_ffmpeg_progress import FfmpegProcess

command = [
    "ffmpeg",
    "-i",
    "partial-input.flv",
    "-c",
    "copy",
    "recovered-output.mkv",
]

process = FfmpegProcess(
    command,
    duration_override=1222.64,
    print_detected_duration=True,
)

process.run()

Optional Arguments

An instance of FfmpegProcess accepts the following optional arguments:

  • ffmpeg_log_level — Set a value for FFmpeg's -loglevel option. Default: "verbose".
  • ffmpeg_log_file — Filepath or file-like object to which FFmpeg stderr will be written. Default: <input filename>_ffmpeg_log.txt.
  • print_detected_duration — Print the detected duration. Default: False.
  • duration_override — Specify input file duration in seconds to use for progress calculation, instead of trying to detect this automatically with FFprobe. Default: None.

The run method accepts the following optional argument:

  • print_command — Print the FFmpeg command being executed. Default: False.

Using tqdm

By default, the Rich library is used to display a progress bar. tqdm can be used instead by setting process.use_tqdm = True:

process = FfmpegProcess(command)
process.use_tqdm = True
process.run()

Metadata

Release files for better-ffmpeg-progress 5.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for better-ffmpeg-progress 5.3.0
File Size Uploaded Provenance Actions
better_ffmpeg_progress-5.3.0.tar.gz 14.1 kB Without provenance Details for better_ffmpeg_progress-5.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for better-ffmpeg-progress 5.3.0
File Interpreter ABI Platform Actions
better_ffmpeg_progress-5.3.0-py3-none-any.whl Python 3 none any Details for better_ffmpeg_progress-5.3.0-py3-none-any.whl

Total release size: 28.9 kB

Release files / better_ffmpeg_progress-5.3.0.tar.gz

Download URL better_ffmpeg_progress-5.3.0.tar.gz
Size 14.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7530771a8447a53a0ea2684c52047979e864aadc7f86b73cb860f9503b8d1ad6
BLAKE2b-256 checksum
How to use checksums
b0f1f8c07d3d36c4c6e374210281c1cb7c6a9bb79394e979661d809c3f8abc26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.13.0

Release files / better_ffmpeg_progress-5.3.0-py3-none-any.whl

Download URL better_ffmpeg_progress-5.3.0-py3-none-any.whl
Size 14.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0be80be9917f79984b9065d7a18e5616f33aa8fa8f31caf20ea711ccaa9ef48a
BLAKE2b-256 checksum
How to use checksums
b7c4c900488bbabc4dd19c1db8c4ac4bf5d4b2be8d26395120a63a6ac7c2ef3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.13.0

Security for better-ffmpeg-progress 5.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

5.3.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page