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

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

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 function will receive the aforementioned metrics as arguments, about two times per second.

      Here's an example of a progress handler that you can create:

      def handle_progress_info(percentage, speed, eta, estimated_filesize):
          print(f"The FFmpeg process is {percentage}% complete. ETA is {eta} seconds.")
          print(f"Estimated Output Filesize: {estimated_filesize / 1_000_000} MB")
      

      Then you simply set the value of the progress_handler argument to the name of your function, like so:

      process.run(progress_handler=handle_progress_info)
      
  • ffmpeg_output_file

    • The ffmpeg_output_file argument allows you 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, but you can change this using the ffmpeg_output_file argument.

Here's an example where both the progress_handler and ffmpeg_output_file parameters are used:

process.run(progress_handler=handle_progress_info, ffmpeg_output_file="ffmpeg_log.txt")

Changelog:

[19/09/2022]

  • Add the ability to specify process_complete_handler, a function to run when the FFmpeg process is complete. E.g.
    process.run(progress_handler=None, ffmpeg_output_file=None, process_complete_handler=my_function)
    
  • Add 0.001 to tqdm's total parameter to prevent the chance of getting TqdmWarning: clamping frac to range [0, 1]

[21/12/2022]

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

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

Uploaded Source

Built Distribution

better_ffmpeg_progress-2.0.7-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for better-ffmpeg-progress-2.0.7.tar.gz
Algorithm Hash digest
SHA256 edacc59b15cbe9b317c86ffc813958dc3d034107d22073865c28a348e6fd0fce
MD5 672367aa91fec87f9a5b1713a84a3d6e
BLAKE2b-256 84af9ec1da6a4e50e649f3383dfc59335902af0031fbd5c18fd9e2ed833e584d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for better_ffmpeg_progress-2.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 00b6425944e2d0bcdfe9c1828a49f7cf2a4fe7e3dcaf909fa05163e371aac383
MD5 6e385b3e4ac1136262832819f8dcb704
BLAKE2b-256 1b299eb42253c22c844bb0ed780ccb7d67e51b12ac7c5fe3beb17594916dd33a

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