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
Share:
10,035
Shahar Mosek
Author by

Shahar Mosek

Updated on June 04, 2022

Comments

  • Shahar Mosek
    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
    Shahar Mosek almost 10 years
    Thanks. 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.
    Roman R. almost 10 years
    Yes it's about right. Review created config.h and check lines with CONFIG_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
    Shahar Mosek almost 10 years
    Followed 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.
    Roman R. almost 10 years
    So you possibly disabled too much? If you just need codecs and no protocols and stuff, then why av_register_all when avcodec_register_all migth be sufficient. You need to re-enable some mandatory stuff back, I suppose.
  • Shahar Mosek
    Shahar Mosek almost 10 years
    Yes. 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
    kritzikratzi almost 9 years
    shahar: could you update this answer with the configure line you ended up using?
  • rogerdpack
    rogerdpack over 4 years
    You 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
    Tina J about 2 years
    I 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.