Skip to main content

Run FFmpeg & see percentage progress + ETA.

Project description

[![PyPI downloads](https://img.shields.io/pypi/dm/better-ffmpeg-progress?label=PyPI\&color=blue)](https://pypistats.org/packages/better-ffmpeg-progress) [![PyPI downloads](https://img.shields.io/pypi/dd/better-ffmpeg-progress?label=PyPI\&color=blue)](https://pypistats.org/packages/better-ffmpeg-progress) ![PyPI - Version](https://img.shields.io/pypi/v/better-ffmpeg-progress) [![GitHub](https://img.shields.io/github/license/crypticsignal/better-ffmpeg-progress?label=License\&color=blue)](LICENSE.txt)

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 ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  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.

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}"
    )

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()

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

better_ffmpeg_progress-5.2.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

better_ffmpeg_progress-5.2.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file better_ffmpeg_progress-5.2.0.tar.gz.

File metadata

  • Download URL: better_ffmpeg_progress-5.2.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.0

File hashes

Hashes for better_ffmpeg_progress-5.2.0.tar.gz
Algorithm Hash digest
SHA256 28cdda4d1e20dd64f755a92b928efdd5e64d7cf6b38579bcc76d8fb947e3a661
MD5 e9f7c12b25dd67160698a4750a739417
BLAKE2b-256 79695f7740b8b1bb5125a499548702eb075440fc12ff3e445a241e3e0497520a

See more details on using hashes here.

File details

Details for the file better_ffmpeg_progress-5.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for better_ffmpeg_progress-5.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ed2b63a9af5d3b1e8e84438850d52120c1d6215e959f3a50a5881dc98bbb473
MD5 55364c5e7a17d41c747b3a32b9d292d9
BLAKE2b-256 7e9ff17b29b4c75d00e0097dfb4666fe03aa3c397469a00899aecffe2fb1ce41

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page