Package: better-ffmpeg-progress
Better FFmpeg ProgressRuns an FFmpeg command and usestqdmto show a progress bar.Example:39%|███████████████████████████████████████████ | 23.6/60.2 [00:19<00:34, 1.07s/s]Where:39%is the percentage progress.23.6seconds of the input file have been processed.60.2is the duration of the input file in seconds.00:19is the time elapsed since the FFmpeg process started.00:34is the estimated time required for the FFmpeg process to complete.1.07shows how many seconds of the input file are processed per second.Installation:pip3 install better-ffmpeg-progress --upgradeUsage:Create an instance of theFfmpegProcessclass and supply a list of arguments like you would tosubprocess.run().Simple Example:frombetter_ffmpeg_progressimportFfmpegProcess# 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:frombetter_ffmpeg_progressimportFfmpegProcessdefhandle_progress_info(percentage,speed,eta,estimated_filesize):print(f"Estimated Output Filesize:{estimated_filesize/1_000_000}MB")defhandle_success():# Code to run if the FFmpeg process completes successfully.passdefhandle_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)Therunmethod takes the followingoptionalarguments:progress_handlerYou can create a function if you would like to do something with the following values:Percentage progress. [float]Speed, e.g.22.3xwhich 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 beNoneif 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 asuccess_handlerargument, a function to run if the FFmpeg process completes successfully.Add 0.001 to tqdm'stotalparameter to prevent the chance of gettingTqdmWarning: clamping frac to range [0, 1][21/12/2022][v2.0.7] Fix'estimated_size' referenced before assignmenterror.[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 anerror_handlerargument, a function to run if the FFmpeg process encounters an error.[v2.0.9] Fix a typo (commitda45a84)[07/02/2022][v2.1.0]Update function nameto fix'process_complete_handler' is not definederror.[05/11/2023][v2.1.2]Do not exit the Python interpreter after the FFmpeg process is complete