Run ffmpeg commands with nicely parsed output.
Project description
FFmpeg output parser
Overview
Do you already know the ffmpeg command line, and don't want to relearn some syntax of a pythonic ffmpeg wrapper? This is the package for you. Just put in an ffmpeg command and this package structures the output while it's processing.
Usage
The code below converts a video, and prints the percentage completion while it's working. This example includes optional error handling, output shown below.
from parsed_ffmpeg import run_ffmpeg, FfmpegError
async def process_video():
try:
await run_ffmpeg(
f"ffmpeg -i input.mp4 -c:v libx264 output.mp4",
on_status=lambda status: print(f"We're: {status.completion * 100:.1f}% there!"),
overwrite_output=True
)
print("Done!")
except FfmpegError as e:
print(f"ffmpeg failed with error: {e}")
Example script output
We're: 8.2% there!
We're: 45.5% there!
We're: 100.0% there!
Done!
Error example
ffmpeg failed with error:
User command:
ffmpeg -i input.mp4 -c:v libx264 output.mp4
Full command:
ffmpeg -i input.mp4 -c:v libx264 output.mp4 -y -progress pipe:1
Working directory:
C:\Users\rutenl\PycharmProjects\parsed_ffmpeg
[in#0 @ 00000208d2d4e1c0] Error opening input: No such file or directory
Error opening input file input.mp4.
Error opening input files: No such file or directory
Example: run with tqdm to get a progressbar
If you install the tqdm extra dependency (pip install parsed-ffmpeg[tqdm]
), you can do the following:
input_video = Path(__file__).parent.parent / "tests/assets/input.mp4"
await run_ffmpeg(
f"ffmpeg -i {input_video} -vf scale=-1:1440 -c:v libx264 output.mp4",
print_progress_bar=True,
progress_bar_description=input_video.name,
overwrite_output=True,
)
It'll give output like this:
input.mp4: 73%|███████▎ | 4466/6084 [00:04<00:00, 1620.10ms/s]
Installation
Remember that this package does not come with an ffmpeg binary, you have to have it in path or point to it in your command.
pip install parsed-ffmpeg
API
run_ffmpeg
async def run_ffmpeg(
command: list[str] | str,
on_status: Callable[[FfmpegStatus], None] | None = None,
on_stdout: Callable[[str], None] | None = None,
on_stderr: Callable[[str], None] | None = None,
on_error: Callable[[list[str]], None] | None = None,
on_warning: Callable[[str], None] | None = None,
overwrite_output: bool = False,
raise_on_error: bool = True,
print_progress_bar: bool = False,
progress_bar_description: str | None = None,
) -> None:
...
StatusUpdate
class StatusUpdate:
frame: int | None
fps: float | None
bitrate: str | None
total_size: int | None
out_time_ms: float | None
dup_frames: int | None
drop_frames: int | None
speed: float | None
progress: str | None
duration_ms: int | None
completion: float | None
Changing ffmpeg install location
Just replace the first part of your command (ffmpeg) with the path to ffmpeg. Example:
await run_ffmpeg("C:/apps/ffmpeg.exe -i input.mp4 -c:v libx264 output.mp4 -y")
License
MIT
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
File details
Details for the file parsed_ffmpeg-0.2.3.tar.gz
.
File metadata
- Download URL: parsed_ffmpeg-0.2.3.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5bbb829d705142722c939f2590eb09b463c7ab8a690d356fb47c92adae65096 |
|
MD5 | 5c40bef8dc71fa382e7d2f1037ed7097 |
|
BLAKE2b-256 | 55837024d388ce29516c8e709678075c299b7cd44169fa04e7f2a39b3fbc635a |
File details
Details for the file parsed_ffmpeg-0.2.3-py3-none-any.whl
.
File metadata
- Download URL: parsed_ffmpeg-0.2.3-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 657374658626d307313096254e0412b055bc3ced39523f66e12549ecbf6ae9ef |
|
MD5 | 389969d60edd58f07f59ac81789b055f |
|
BLAKE2b-256 | 54ed75ee5dc68bc6fbb1f3ce73268e1b90d8026a63218b48629c886c8c1f6df6 |