// the find
imkira/go-libav
Go language bindings for ffmpeg libraries
CGo bindings for ffmpeg's libav libraries (avcodec, avformat, avfilter, avutil), wrapping the C API in Go structs with proper error handling and finalizer-based memory management. Aimed at Go developers who need low-level ffmpeg access without shelling out to the CLI.
Covers the four core libav libraries with a consistent OO wrapper pattern — formats, codecs, filters, and utils all follow the same idiom. Build-tag approach for ffmpeg 3.0 vs 3.3 API differences is clean; no #ifdef soup leaking into Go code. Tests exist and cover real codec/format operations, not just stub calls. Memory management via finalizers is a genuine improvement over most CGo ffmpeg wrappers that leak.
Pinned to ffmpeg 3.x — current ffmpeg is 7.x and the API has changed significantly; this will not build against any modern system installation without backporting or vendoring old ffmpeg headers. Last commit was 2021, Travis CI badge is broken, and the project self-describes as incomplete — large chunks of the API (avdevice, swscale, swresample) are simply absent. The transcoder example is the only real usage demo, which leaves a lot of guesswork for anything beyond basic remuxing. CGo in general means cross-compilation is painful and cgo-disabled builds are impossible.