Local media automation / signal online
FFmpeg jobs you can explain.
Preflight the machine. Preview the exact plan. Run a maintained workflow. Keep a privacy-redacted receipt. PyFFmpegCore turns fragile media commands into repeatable operations for the terminal, Python, Node.js, and CI.
pipx install "pyffmpegcore==0.3.3"
Requires Python 3.10–3.14 and system ffmpeg/ffprobe. View package →
Node.js launcher on npm → (Python and FFmpeg required)
PyFFmpegCore CLI 0.3.3 Smoke test: PASS Preflight PASS — convert Progress: 100% complete Valid receipt: schema 1.0, 1 item(s) PASS — public install, preflight, plan, progress, output, and receipt all verified.
Accessible transcript excerpt from the recorded public PyPI run.
Public PyPI 0.3.3 recording / no staged output
Watch a real 0.3.3 run.
The 64.3-second capture shows the public 0.3.3 install, capability scan, synthetic smoke test, explained plan, progress, probed output, and validated receipt.
One job.
Four proofs.
Most wrappers start at execution. PyFFmpegCore starts one step earlier and leaves evidence one step later, so the same intent is reviewable before and after FFmpeg touches a file.
Know the machine
Resolve binaries, encoders, filters, muxers, protocols, streams, destination, and disk requirements.
See the exact work
Inspect a deterministic argument vector and human explanation without mutating the filesystem.
Control failure
Use explicit overwrite, timeout, cancellation, cleanup, progress, and stable exit-code policies.
Keep the evidence
Record redacted plans, tool versions, probes, elapsed results, and output facts without uploading media.
Measured.
Not mocked.
The 19 September replay used generated first-party fixtures. A separate public-domain Xiph clip confirms the exact-size result. Commands, probes, receipts, checksums, and limits are open for inspection.
2,141,004-byte VP9 WebM to a 3,814,506-byte H.264/AAC MP4. Wider playback compatibility can increase size.
Inspect the replay →An 8,147,493-byte Xiph VP9 clip reached 1,035,870 bytes with a 7% reserve. The default 5% missed by 7,803 bytes.
Inspect the exact-size check →A −22.0 LUFS WAV normalized toward the declared −16.0 LUFS speech target.
Inspect the replay →Choose your lane.
Start from the outcome you need. Every lane reaches the same planner, preflight, runner, and receipt model.
One useful file
Convert a web video, fit an upload limit, normalize speech, burn subtitles, extract audio, or make thumbnails.
Open the recipe index →Repeatable pipeline
Validate, visualize, run, cache, and resume strict JSON or TOML DAGs without embedding raw shell strings.
Build a pipeline →Automation surface
Use the same typed engine from Python, the npm launcher, or a digest-pinned GitHub Action.
Install the Node.js launcher → Open the Python API →Know when not to use it.
Raw FFmpeg is better when you already own the exact argument vector. Graph builders are better for arbitrary filter graphs. PyAV is better for direct packet and frame access. PyFFmpegCore owns the repeatable task layer: diagnostics, plans, execution policy, and proof.
Read the factual comparison →If a preview or receipt helps you ship media, star PyFFmpegCore on GitHub or share a reproducible issue.