Skip to main content

Run FFmpeg & see percentage progress + ETA.

Project description

PyPI downloads PyPI downloads GitHub

Better FFmpeg Progress

Runs an FFmpeg command and uses tqdm to show a progress bar.

Example:

39%|███████████████████████████████████████████ | 23.6/60.2 [00:19<00:34, 1.07s/s]

Where:

  • 39% is the percentage progress.
  • 23.6 seconds of the input file have been processed.
  • 60.2 is the duration of the input file in seconds.
  • 00:19 is the time elapsed since the FFmpeg process started.
  • 00:34 is the estimated time required for the FFmpeg process to complete.
  • 1.07 shows how many seconds of the input file are processed per second.

Installation:

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

Simple Example:

from better_ffmpeg_progress import FfmpegProcess
# Pass a list of FFmpeg arguments, like you would if using subprocess.run()
process = FfmpegProcess(["ffmpeg", "-i", "input.mp4", "-c:a", "libmp3lame", "output.mp3"])
# Use the run method to run the FFmpeg command.
process.run()

Advanced Example:

from better_ffmpeg_progress import FfmpegProcess

def handle_progress_info(percentage, speed, eta, estimated_filesize):
    print(f"Estimated Output Filesize: {estimated_filesize / 1_000_000} MB")

def handle_success():
  # Code to run if the FFmpeg process completes successfully.
  pass

def handle_error():
  # Code to run if the FFmpeg process encounters an error.
  pass

# Pass a list of FFmpeg arguments, like you would if using subprocess.run()
process = FfmpegProcess(["ffmpeg", "-i", "input.mp4", "-c:a", "libmp3lame", "output.mp3"])

ffmpeg_output_path = 'ffmpeg_output.txt'

# Use the run method to run the FFmpeg command.
process.run(progress_handler=handle_progress_info, ffmpeg_output_file=ffmpeg_output_path, success_handler=handle_success, error_handler=handle_error)

The run method takes the following optional arguments:

  • progress_handler

    • You can create a function if you would like to do something with the following values:

      • Percentage progress. [float]
      • Speed, e.g. 22.3x which means that 22.3 seconds of the input are processed every second. [string]
      • ETA in seconds. [float]
      • Estimated output filesize in bytes. [float]
        • Note: This is not accurate. Please take the value with a grain of salt.

      The values will be None if unknown. The function will receive the aforementioned metrics as arguments, about two times per second.

  • ffmpeg_output_file - A string path to define where you want the output of FFmpeg to be saved. By default, this is saved in a folder named "ffmpeg_output", with the filename [<input_filename>].txt.

  • success_handler - A function to run if the FFmpeg process completes successfully.

  • error_handler - A function to run if the FFmpeg process encounters an error.

Changelog:

[19/09/2022]

  • Add the ability to specify a success_handler argument, a function to run if the FFmpeg process completes successfully.
  • Add 0.001 to tqdm's total parameter to prevent the chance of getting TqdmWarning: clamping frac to range [0, 1]

[21/12/2022]

  • [v2.0.7] Fix 'estimated_size' referenced before assignment error.
  • [v2.0.7] The progress bar now uses 1 decimal place for seconds processed and total duration.

[22/12/2022]

  • [v2.0.8] Add the ability to specify an error_handler argument, a function to run if the FFmpeg process encounters an error.
  • [v2.0.9] Fix a typo (commit da45a84)

[07/02/2022]

[05/11/2023]

[22/04/2024]

  • [v2.1.3] Fix issue #20

[28/04/2024]

  • [v2.1.4] Fix issue #21

Project details


Release history Release notifications | RSS feed

This version

2.1.5

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-2.1.5.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

better_ffmpeg_progress-2.1.5-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file better-ffmpeg-progress-2.1.5.tar.gz.

File metadata

File hashes

Hashes for better-ffmpeg-progress-2.1.5.tar.gz
Algorithm Hash digest
SHA256 0ef9da5877df4814c397ba5e84e71bfa37eeb1bb581261967e90d70dea45fb27
MD5 ec10e5699252398d1a681ce4dc03d485
BLAKE2b-256 c19fc27d85f4ce6424f13931205092c96d437aa3922ecdaf72459e65a988de08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for better_ffmpeg_progress-2.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e7ad75242cc23ce14abdcfc1442192d1c139d1a0f3e196eb5bdb05cc4dee8871
MD5 f510c9f5db00bbac1a0fb57359bd5bb6
BLAKE2b-256 8d18c34df6947047b15c3b4ac555c3178ccf6f7e7ae4ee9cf20720db326e37f5

See more details on using hashes here.

Supported by

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