Compile FFMpeg without most codecs
10,035
You can use configure
with --disable-everything
and then enable only what you need, then build this configuration. More on this: Building FFmpeg. This way you don't need to touch source code (manual edits).
Specifically what is affected and other switches (excerpt from configure
script):
Individual component options:
--disable-everything disable all components listed below
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
--enable-indev=NAME enable input device NAME
--disable-indev=NAME disable input device NAME
--disable-indevs disable input devices
--enable-outdev=NAME enable output device NAME
--disable-outdev=NAME disable output device NAME
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters
Author by
Shahar Mosek
Updated on June 04, 2022Comments
-
Shahar Mosek about 2 years
I'm looking to compile ffmpeg so that it supports only a handful of codecs. Specifically, only PCM codecs and MP3.
Any pointers on how to do that? Can it be done with compilation flags, or do I need to edit the code?
-
Shahar Mosek almost 10 yearsThanks. So should I just use --disable-everything --enable-encoder=PCM enable-encoder=MP3 --enable-decoder=PCM enable-decoder=MP3. Do you know if those are the correct encoder/decoder names, or where I can see them?
-
Roman R. almost 10 yearsYes it's about right. Review created
config.h
and check lines withCONFIG_MP3_DECODER
and similar to see what effect your switches had. That would also be the answer if the switches/names are correct. -
Shahar Mosek almost 10 yearsFollowed your advice, disabled everything and added the decoders and encoders as needed (also muxers and demuxers). However, ffmpeg fails, saying: No URL Protocols are registered. Missing call to av_register_all()? Any ideas? Your help is very much appreciated.
-
Roman R. almost 10 yearsSo you possibly disabled too much? If you just need codecs and no protocols and stuff, then why
av_register_all
whenavcodec_register_all
migth be sufficient. You need to re-enable some mandatory stuff back, I suppose. -
Shahar Mosek almost 10 yearsYes. I enabled all filters, bsfs, devices and protocols, and it appears to be working. Will tweak it, but it looks like I am on the right track.
-
kritzikratzi almost 9 yearsshahar: could you update this answer with the configure line you ended up using?
-
rogerdpack over 4 yearsYou have to enable "various things" sometimes when using --disable-everything like ` --enable-protocols` ex:
--disable-autodetect --disable-everything --enable-protocols --enable-demuxer=image2 --enable-muxer=mp4 --enable-demuxer=concat --enable-decoder=png --enable-decoder=bmp --enable-decoder=apng --enable-zlib --enable-encoder=libx264 --enable-filter=scale --enable-decoder=h264 --enable-demuxer=mov --enable-bsf=h264_mp4toannexb --enable-demuxer=image2pipe --enable-demuxer=image_png_pipe
-
Tina J about 2 yearsI was using
--disable-everything
and then--enable
various codecs. It was working fine with ffmpeg code 3.4.6. But on newer versions, at least on 5.0+, it causes issues on reading a basic H264 file. I guess some important features would be missing. So better to avoid--disable-everything
and enabling what you need.