Awesome
FFmpeg Packaged for Zig
This is a fork of ffmpeg, packaged for Zig. Unnecessary
files have been deleted, and the build system has been replaced with
build.zig
.
There are no system dependencies; the only thing required to build this package is Zig.
Zig API bindings are also provided via the "av" module. See doc/examples
for
API usage examples.
Differences from Upstream
- Only a single static library is produced. There is no option to create a dynamic library.
- The ffmpeg command line tool is not provided. Perhaps this could be added if desired.
- Documentation, tests, and tools are not provided.
- This package enables everything supported by the target; it does not expose configuration options to choose the set of supported codecs and formats.
- The set of external library integrations is fixed.
External Libraries Included
- libmp3lame
- libvorbis
- libogg
More can be added as desired.
Update Process
These are the instructions to update this package when a new FFmpeg version is released upstream.
- Merge the new tag into main and resolve all conflicts by replacing the conflicting files with the files from upstream.
find libavcodec/ libavdevice/ libavfilter/ libavformat libavutil/ libswscale/ libswresample/ -type f -name "*.asm" -o -name "*.c" -o -name "*.S"
- Edit to omit files ending in
_template.c
or_tablegen.c
- Sort the list
- Update the
all_sources
list inbuild.zig
.
- Edit to omit files ending in
- Inspect the git diff to keep some of the source files commented out like
they were before. Some handy filtering rules apply:
/L
prefix means Linux-only/W
prefix means Windows-only
- Run
./configure --prefix=$HOME/local/ffmpeg --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-programs --enable-libmp3lame --enable-libvorbis --disable-shared --enable-static
against upstream and diff the generatedconfig.h
file to the one generated by this build script. Apply appropriate changes tobuild.zig
. - Update these files which are generated by the upstream configure script:
config_components.h
libavfilter/filter_list.c
libavcodec/codec_list.c
libavcodec/parser_list.c
libavcodec/bsf_list.c
libavformat/demuxer_list.c
libavformat/muxer_list.c
libavdevice/indev_list.c
libavdevice/outdev_list.c
libavformat/protocol_list.c
- Update the
headers
list inbuild.zig
based on what files are present in$HOME/local/ffmpeg/include
.