finds.dev← search

// the find

PyAV-Org/PyAV

★ 3,305 · Python · BSD-3-Clause · updated Oct 2026

Pythonic bindings for FFmpeg's libraries.

PyAV gives you direct, low-level Python access to FFmpeg's libavformat/libavcodec/libavutil through Cython bindings — containers, streams, packets, and frames as actual Python objects instead of shelling out to the ffmpeg CLI and parsing stdout. It's for people doing real media processing (transcoding pipelines, frame extraction into NumPy, custom muxers) who need control the CLI can't give them, not for someone who just wants to resize a video.

Prebuilt wheels bundle FFmpeg itself for Linux/macOS/Windows, so most users skip the usual FFmpeg dev-header hell entirely. It's a real Cython extension (.pxd/.pyx throughout), not a ctypes shim, so frame-by-frame work doesn't eat a Python-call-overhead tax. Test coverage is genuinely broad — seeking, remuxing, subtitles, hwaccel, bitstream filters, dlpack interop — which matters a lot for a library wrapping something as finicky as FFmpeg. NumPy/Pillow interop for frame data is first-class rather than bolted on.

Building from source is still rough: you need pkg-config and FFmpeg dev files on Linux/macOS, and on Windows you're locked into a Conda environment with the project's own vendored FFmpeg headers — there's no plain pip-and-go path if the wheel doesn't fit your platform. The README itself warns the API won't abstract FFmpeg's complexity away, which is honest but means you're on the hook for understanding containers/codecs/frames correctly or you'll corrupt output silently. Python 3.12+ only cuts off anyone on older LTS runtimes without warning in the install instructions. Being a compiled Cython extension also means segfaults and crashes trace back into C/FFmpeg internals, which is a much worse debugging experience than a pure-Python failure.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →