{"id":33405275,"url":"https://github.com/linuxmatters/ffmpeg-statigo","last_synced_at":"2026-03-13T02:01:52.840Z","repository":{"id":325316767,"uuid":"1100710523","full_name":"linuxmatters/ffmpeg-statigo","owner":"linuxmatters","description":"Real FFmpeg bindings for Go. Not a wrapper. Not a CLI tool. The actual libraries 📚","archived":false,"fork":false,"pushed_at":"2026-01-14T18:27:29.000Z","size":305408,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-17T07:30:39.633Z","etag":null,"topics":["ffmpeg","go","go-bindings","go-library","go-module"],"latest_commit_sha":null,"homepage":"https://linuxmatters.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linuxmatters.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"flexiondotorg","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"custom":null}},"created_at":"2025-11-20T16:41:44.000Z","updated_at":"2026-01-14T18:16:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/linuxmatters/ffmpeg-statigo","commit_stats":null,"previous_names":["linuxmatters/ffmpeg-statigo"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/linuxmatters/ffmpeg-statigo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxmatters%2Fffmpeg-statigo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxmatters%2Fffmpeg-statigo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxmatters%2Fffmpeg-statigo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxmatters%2Fffmpeg-statigo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linuxmatters","download_url":"https://codeload.github.com/linuxmatters/ffmpeg-statigo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxmatters%2Fffmpeg-statigo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30454982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T21:31:01.033Z","status":"online","status_checked_at":"2026-03-13T02:00:07.565Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffmpeg","go","go-bindings","go-library","go-module"],"created_at":"2025-11-23T16:03:10.813Z","updated_at":"2026-03-13T02:01:52.834Z","avatar_url":"https://github.com/linuxmatters.png","language":"Go","funding_links":["https://github.com/sponsors/flexiondotorg"],"categories":[],"sub_categories":[],"readme":"# ffmpeg-statigo\n\n**Real FFmpeg bindings for Go. Not a wrapper. Not a CLI tool. The actual libraries.**\n\nCross-platform, static FFmpeg libraries bundled directly into your Go binary.\nHardware acceleration included. Zero runtime dependencies. Ship it and forget it.\n\n## Why This Exists\n\nEvery other Go ffmpeg projects wrap the `ffmpeg` command, ffmpeg-statigo gives you the actual FFmpeg C libraries with proper Go bindings.\nBuild once, deploy anywhere. No hunting for system FFmpeg. No version mismatches. Predictable codec support.\n\n## Features\n\n- **FFmpeg 8.0.1** - Latest release with AV1, H.265, H.264, VP8/9\n- **Truly static** - Builds into your binary (just needs system `m` and `stdc++` libraries)\n- **Cross-platform** - Linux and macOS (arm64, amd64)\n- **Hardware acceleration** - NVENC/NVDEC, QuickSync, VA-API, VideoToolbox, and Vulkan support\n- **GPL build** - x264, x265, and all the good codecs included\n- **Auto-generated** - Thin, predictable bindings directly from FFmpeg headers\n- **Preserved documentation** - Original FFmpeg comments in your IDE\n\n*Hard fork of the excellent [csnewman/ffmpeg-go](https://github.com/csnewman/ffmpeg-go), modernised with FFmpeg 8.0.x, Go 1.24, hardware acceleration, ~85% FFmpeg API coverage, and a 99.5% smaller git history.*\n\n## Installation\n\nStatic libraries (~100MB per platform) cannot be distributed via `go get`. Use as a git submodule with a replace directive:\n\n1. Add submodule: `git submodule add https://github.com/linuxmatters/ffmpeg-statigo third_party/ffmpeg-statigo`\n2. Add replace directive to `go.mod`: `replace github.com/linuxmatters/ffmpeg-statigo =\u003e ./third_party/ffmpeg-statigo`\n3. Download libraries: `cd third_party/ffmpeg-statigo \u0026\u0026 go run ./cmd/download-lib`\n4. Configure git for submodule-friendly pulls: `git config pull.ff only \u0026\u0026 git config submodule.recurse true`\n5. Build: `go build ./...`\n\nStep 4 prevents `git pull --rebase` from breaking submodule references. Fast-forward only pulls ensure submodule commits stay in sync with the parent repository.\n\nStatic libraries are gitignored—only the submodule reference is committed.\n\n**See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for CI/CD integration, cross-compilation, and troubleshooting.**\n\n## Codec Inclusion Policy\n\nffmpeg-statigo provides a **curated FFmpeg static library** focused on the core strengths of FFmpeg: **decoding, processing, and encoding** audio and video streams. ffmpeg-statigo is designed for **Go developers building modern streaming applications**. The pattern is:\n\n1. **Generate content in Go** - Text, graphics, effects using Go's excellent libraries\n2. **Feed frames to FFmpeg** - Use ffmpeg-statigo for encoding and stream processing\n3. **Let FFmpeg handle codecs** - Hardware acceleration, format conversion, container muxing\n\n#### What's Included\n\n- **Decoders**: All contemporary formats (H.264, H.265, AV1, VP8/9, Opus, AAC, MP3)\n- **Encoders**: Modern codecs for streaming and transcoding (x264, x265, dav1d, rav1e, vpx, lame, opus)\n- **Hardware acceleration**: NVENC, QuickSync, VA-API, VideoToolbox, Vulkan Video\n- **Containers**: MP4, MKV, WebM, DASH, HLS, and all major formats\n- **Filters**: Video scaling, colour conversion, audio resampling, and processing filters\n- **Streaming protocols**: RTMP, SRT, HLS, DASH\n\n**Building something that deals with video?** You're probably covered:\n- Streaming platform (your own Twitch/YouTube/Owncast)\n- Content management system with media handling\n- Social media app with video uploads\n- Video conferencing service\n- Transcoding pipeline for your media library\n- Home media server ripping DVDs/Blu-rays\n- Web-based media player\n- Broadcasting tool or modern content creation workflow\n\n#### What's Intentionally Absent\n\nSome FFmpeg features commonly found in the `ffmpeg` CLI tool are **not included** because they're better implemented in Go:\n\n- ❌ **`drawtext` filter** - Use Go's `image/draw` + `golang.org/x/image/font` packages instead\n- ❌ **Font libraries** (freetype, harfbuzz, fontconfig) - Not needed when rendering in Go\n- ❌ **`subtitles` and `ass` filters** - Use separate subtitle streams instead\n- ❌ **libass** - Subtitle rendering library not needed\n  - FFmpeg can still **copy, extract, and mux** subtitle streams without libass.\n\nThe excluded features can be added back if a compelling use case emerges. ffmpeg-statigo is a **living project** and the curated library evolves based on real-world needs.\n\nIf you need complete FFmpeg with all filters, use the official FFmpeg distribution. If you need modern streaming codecs with Go integration, ffmpeg-statigo is designed for you.\n\n### Library versions\n\n| Library          | Version     | Description                                                                        |\n|------------------|-------------|------------------------------------------------------------------------------------|\n| FFmpeg           | 8.0.1       | A complete, cross-platform solution to record, convert and stream audio and video  |\n| dav1d            | 1.5.3       | AV1 cross-platform decoder, open-source, and focused on speed, size and correctness|\n| glslang          | 15.4.0      | Khronos-reference front end for GLSL/ESSL and a SPIR-V generator                   |\n| libdrm           | 2.4.131     | Direct Rendering Manager library and headers (*Linux only*)                        |\n| libiconv         | 1.19        | A character set conversion library (*macOS only*)                                  |\n| libsrt           | 1.5.5-rc.1  | A transport protocol for ultra low latency live video and audio streaming          |\n| libva            | 2.23.0      | An implementation for VA-API (Video Acceleration API) (*Linux only*)               |\n| libvpl           | 2.16.0      | Intel Video Processing Library (Intel VPL) API (*Linux only*)                      |\n| libvpx           | 1.16.0      | High-quality, open video format for the web that's freely available to everyone    |\n| libwebp          | 1.6.0       | A modern image format providing superior lossless and lossy compression            |\n| libxml2          | 2.15.2      | An XML parser and toolkit implemented in C                                         |\n| mp3lame          | 3.100       | A high quality MPEG Audio Layer III (MP3) encoder                                  |\n| nv-codec-headers | 13.0.19.0   | Headers required to interface with Nvidias codec APIs (*Linux only*)               |\n| openssl          | 3.6.1       | Open Source Toolkit for the TLS, DTLS, and QUIC protocols.                         |\n| opus             | 1.6.1       | A totally open, royalty-free, highly versatile audio codec                         |\n| rav1e            | 0.8.1       | The fastest and safest AV1 encoder.                                                |\n| Vulkan-Headers   | 1.4.345     | Vulkan header files and API registry                                               |\n| x264             | head        | H.264/MPEG-4 AVC compression format library for encoding video streams             |\n| x265             | head        | H.265/MPEG-H HEVC compression format library for encoding video streams            |\n| zimg             | 3.0.6       | Scaling, colorspace conversion, and dithering library                              |\n| zlib             | 1.3.2       | A Massively Spiffy Yet Delicately Unobtrusive Compression Library                  |\n\nVVenC 1.13.1 (Fraunhofer Versatile Video Encoder, a fast \u0026 efficient software H.266/VVC encoder) is in the build configuration, **but currently disabled**, as it adds ~25MB to the static ffmpeg library and is too slow for practical use.\n\n### Enabled Codecs\n\nDetails of codecs, muxers and parsers available in enable in the static ffmpeg library that ffmpeg-statigo ships are documented in [`docs/CODECS.md`](docs/CODECS.md).\n\n### Hardware Acceleration Support Matrix\n\n| Codec          | NVENC (Linux)    | VA-API (Linux)    | QuickSync (Linux) | VideoToolbox (macOS) | Vulkan Video (Cross-platform) |\n|----------------|------------------|-------------------|-------------------|----------------------|-------------------------------|\n| **AV1**        | ✅ Encode/Decode | ☑️ Encode         | ✅ Encode/Decode  | ☑️ Decode            | ✅ Encode/Decode              |\n| **H.266/VVC**  | ❌               | ❌                | ☑️ Decode         | ❌                   | ☑️ Decode                     |\n| **H.265/HEVC** | ✅ Encode/Decode | ☑️ Encode         | ✅ Encode/Decode  | ✅ Encode/Decode     | ✅ Encode/Decode              |\n| **H.264/AVC**  | ✅ Encode/Decode | ☑️ Encode         | ✅ Encode/Decode  | ✅ Encode/Decode     | ✅ Encode/Decode              |\n| **VP9**        | ✅ Encode/Decode | ☑️ Encode         | ✅ Encode/Decode  | ❌                   | ☑️ Decode                     |\n| **VP8**        | ☑️ Decode        | ☑️ Encode         | ☑️ Decode         | ❌                   | ❌                            |\n| **MPEG-2**     | ☑️ Decode        | ☑️ Encode         | ✅ Encode/Decode  | ❌                   | ❌                            |\n| **MJPEG**      | ☑️ Decode        | ☑️ Encode         | ✅ Encode/Decode  | ❌                   | ❌                            |\n\n### Capabilities\n\n- **NVENC/NVDEC**: [Most NVIDIA GPUs come with NVENC/NVDEC support](https://developer.nvidia.com/video-encode-decode-support-matrix) but some low-end and mobile models are exceptions.\n  - Decoding \u0026 Encoding H.264 8-bit - Any NVIDIA GPU supporting NVENC/NVDEC\n  - Decoding \u0026 Encoding HEVC 8-bit - Maxwell 2nd Gen (GM206) and newer\n  - Decoding HEVC 10-bit - Maxwell 2nd Gen (GM206) and newer\n  - Encoding HEVC 10-bit - Pascal and newer\n  - Decoding AV1 8/10-bit - Ampere and newer\n  - Encoding AV1 8/10-bit - Ada Lovelace and newer\n- **VA-API**: Video Acceleration API for Intel, AMD, and NVIDIA (via `nvidia-vaapi-driver`) GPUs on Linux. Provides hardware encoding; decoding uses FFmpeg's hwaccel framework.\n  - Encoding H.264, HEVC, AV1, VP8, VP9, MPEG-2, MJPEG - Hardware dependent\n  - Intel: Use `iHD` driver (intel-media-driver) for broadest codec support\n  - AMD: Use `radeonsi` driver (Mesa) for RDNA/GCN GPUs\n  - NVIDIA: Use `nvidia` driver (nvidia-vaapi-driver) which translates to NVENC\n- **QuickSync (QSV)**: Requires Intel CPU (11th gen Tiger Lake+) or Intel Arc GPU. Uses libvpl/oneVPL dispatcher. Older Intel CPUs (6th-10th gen) should use VA-API instead.\n  - Decoding \u0026 Encoding H.264 8-bit - Any Intel GPU that supports Quick Sync Video\n  - Decoding \u0026 Encoding HEVC 8-bit - Gen 9 Skylake (6th Gen Core) and newer\n  - Decoding \u0026 Encoding HEVC 10-bit - Gen 9.5 Kaby Lake (7th Gen Core), Apollo Lake, Gemini Lake (Pentium and Celeron) and newer\n  - Decoding AV1 8/10-bit - Gen 12 Tiger Lake (11th Gen Core) and newer\n  - Encoding AV1 8/10-bit - Gen 12.5 DG2 / ARC A-series, Gen 12.7 Meteor Lake (14th Gen Core Mobile / 1st Gen Core Ultra) and newer\n  - VP9 requires 7th gen Kaby Lake or newer\n- **VideoToolbox**: Available on macOS with Apple Silicon or Intel Macs with hardware support.\n  - Decoding \u0026 Encoding H.264 8-bit - Any VideoToolbox-supported Mac.\n  - Decoding \u0026 Encoding HEVC 8/10-bit - Macs from 2017 and later\n  - Decoding AV1 8/10-bit - Requires an M3 series Apple Silicon Mac\n- **Vulkan Video**: Works with any GPU that has Vulkan 1.3+ drivers.\n  - Decoding \u0026 Encoding H.264 8-bit\n  - Decoding \u0026 Encoding HEVC 8/10-bit\n  - Decoding \u0026 Encoding AV1 8/10-bit\n  - **Works via MoltenVK on macOS when MoltenVK runtime is installed**\n\n## Licensing\n\nThe Go binding code is MIT licensed. However, the bundled FFmpeg libraries are compiled with GPL-licensed components like `x264` and `x265`.\nAny project using ffmpeg-statigo inherits the GPL requirements from FFmpeg through this linking, making the combined work subject to GPLv3 licensing obligations.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxmatters%2Fffmpeg-statigo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxmatters%2Fffmpeg-statigo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxmatters%2Fffmpeg-statigo/lists"}