Run FFmpeg & see percentage progress + ETA.
Project description
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.webmis the description of the progresss bar.23%is the percentage progress.0:00:04is the time elapsed.00:15is 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-logleveloption. 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28cdda4d1e20dd64f755a92b928efdd5e64d7cf6b38579bcc76d8fb947e3a661
|
|
| MD5 |
e9f7c12b25dd67160698a4750a739417
|
|
| BLAKE2b-256 |
79695f7740b8b1bb5125a499548702eb075440fc12ff3e445a241e3e0497520a
|
File details
Details for the file better_ffmpeg_progress-5.2.0-py3-none-any.whl.
File metadata
- Download URL: better_ffmpeg_progress-5.2.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ed2b63a9af5d3b1e8e84438850d52120c1d6215e959f3a50a5881dc98bbb473
|
|
| MD5 |
55364c5e7a17d41c747b3a32b9d292d9
|
|
| BLAKE2b-256 |
7e9ff17b29b4c75d00e0097dfb4666fe03aa3c397469a00899aecffe2fb1ce41
|