Introduction to FFmpeg
FFmpeg is a solution to record, convert and
stream audio and video. It is a very fast video and audio converter and it
can also acquire from a live audio/video source. Designed to be intuitive,
the command-line interface (ffmpeg) tries to figure out
all the parameters, when possible. FFmpeg can
also convert from any sample rate to any other, and resize video on the
fly with a high quality polyphase filter.
FFmpeg can use a Video4Linux compatible video
source and any Open Sound System audio source.
This package is known to build and work properly
using an LFS 12.4 platform.
Package Information
Download (HTTP): https://ffmpeg.org/releases/ffmpeg-8.0.1.tar.xz
Download SHA256 Sum: 05ee0b03119b45c0bdb4df654b96802e909e0a752f72e4fe3794f487229e5a41
Download MD5 sum: b4e86cef7b3333034977ae9df391896d
Download size: 83,777.7 KB
Estimated disk space required: 1,924,261.6 KB
Estimated build time: 9.55 SBU
Additional Downloads
FFmpeg Dependencies
Recommended
dav1d-1.5.2,
libaom-3.13.1 (for chroma subsampling outside of YUV420)
libass-0.17.4,
fdk-aac-2.0.3,
FreeType-2.14.1,
LAME-3.100,
the section called “libvorbis-1.3.7”,
libvpx-1.15.2,
Opus-1.5.2,
SVT-AV1-3.1.2 (only supports YUV420),
x264-20250815,
x265-4.1, and
NASM-3.01
Recommended for desktop use
alsa-lib-1.2.14,
libva-2.22.0, and
sdl2-compat-2.32.60
Recommended for systems with NVIDIA Video
libvdpau-1.5 and
libvdpau-va-gl-0.4.2
Optional
Fontconfig-2.17.1,
FriBidi-1.0.16,
frei0r-2.5.0,
libcdio-2.1.0 (to identify and play CDs),
libdrm-2.4.129 (for “kmsgrab” input),
libplacebo-7.351.0 (for hardware accelerated color spaces and HDR tonemapping),
libwebp-1.6.0,
GnuTLS-3.8.11,
PulseAudio-17.0,
the section called “Speex-1.2.1”,
v4l-utils-1.32.0,
Vulkan-Loader-1.4.328.1,
XviD-1.3.7,
Installation of FFmpeg
First, apply a patch that adds an API necessary for some packages to
build:
patch -Np1 -i ../ffmpeg-8.0.1-chromium_method-1.patch
Prepare FFmpeg by running the following
commands:
./configure --prefix=/usr \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-static \
--enable-shared \
--disable-debug \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-openssl \
--enable-libdav1d \
--enable-libsvtav1 \
--enable-vulkan \
--enable-libxvid \
--enable-libwebp \
--enable-libplacebo \
--ignore-tests=enhanced-flv-av1,enhanced-flv-multitrack \
--docdir=/usr/share/doc/ffmpeg-8.0.1
To Build the package, issue:
make
gcc tools/qt-faststart.c -o tools/qt-faststart
The fate-suite tests include comparisons with installed files, and should
not be run before the package is installed. Therefore, if you desire to
run them, instructions are given further below.
Now Install the package, as the root user:
make install
install -v -m755 tools/qt-faststart /usr/bin
install -v -m755 -d /usr/share/doc/ffmpeg-8.0.1
install -v -m644 doc/*.txt /usr/share/doc/ffmpeg-8.0.1
To properly test the installation you must have rsync-3.4.1
installed and follow the instructions for the FFmpeg Automated Testing
Environment (FATE). First, about 1 GB of sample files used to
run FATE are downloaded with the command:
make fate-rsync SAMPLES=fate-suite/
The fate-suite directory is
created and the files are downloaded there. That command actually runs an
rsync command to obtain the sample files. You may want to compress and
keep this directory for testing again, for testing in another system,
or for when a new version of ffmpeg is released. Then, unpack the sample
files in the source directory, and run the make fate-rsync
... command above to sync with the upstream repository. The
download size and time are drastically reduced by doing this. Estimated
values in "Package Information" do not include the download SBU. Some
samples may have been removed in newer versions, so in order to be sure
local and server fate samples are identical when you use previously
saved samples, run the following command:
rsync -vrltLW --delete --timeout=60 --contimeout=60 \
rsync://fate-suite.ffmpeg.org/fate-suite/ fate-suite/
Next, execute FATE with the following commands (there are more than 5200
tests in the suite):
make fate THREADS=N SAMPLES=fate-suite/ | tee ../fate.log
grep ^TEST ../fate.log | wc -l
where N is an integer,
N ≤ number of cores in the system.
A successful run should return no errors or warnings, just a list of tests.
Command Explanations
find ... ;: Fixes permissions of documentation files
and directories.
--enable-gpl: Enables the use of GPL code and
permits support for postprocessing, swscale and many other features.
--enable-version3: Enables the use of (L)GPL
version 3 code.
--enable-nonfree: Enables the use of nonfree code.
Note that the resulting libraries and binaries will be unredistributable.
--disable-static: This switch prevents
installation of static versions of the libraries.
--enable-shared: Enables building shared
libraries, otherwise only static libraries are built and installed.
--disable-debug: Disables building debugging
symbols into the programs and libraries.
--enable-libaom: Enables AV1 encoding and
decoding via libaom.
--enable-libass: Enables ASS/SSA subtitle format
rendering via libass.
--enable-libdav1d: Enables AV1 decoding
via libdav1d.
--enable-libdrm: Use this switch if
libdrm-2.4.129 is installed to build the “kmsgrab”
input module which is useful for screen capturing or streaming.
--enable-libfdk-aac: Enables AAC audio encoding via
libfdk-aac.
--enable-libfreetype: Enables
Freetype support.
--enable-libmp3lame: Enables MP3 audio encoding
via libmp3lame.
--enable-libsvtav1: Enables AV1 encoding
via libSvtAv1Enc. It however
only supports chroma subsampling of YUV420.
--enable-libvorbis
--enable-libvpx: Enables WebM
encoding via libvorbis and
libvpx.
--enable-libx264: Enables high-quality
H.264/MPEG-4 AVC encoding via libx264.
--enable-libx265: Enables high-quality
H.265/HEVC encoding via libx265.
--enable-openssl:
Enables HTTPS protocol for network streams.
--ignore-tests=...: Disables tests that fail to
run on
BLFS without the optional packages. Currently the AV1 test is disabled
as it needs dav1d to do AV1 decoding on the CPU. The test might work if
you have a GPU that can decode AV1, but this was not tested.
--enable-gnutls: Use this option instead of
--enable-openssl, if you want to use
GnuTLS instead of
OpenSSL for HTTPS protocol.
--disable-doc: Disables building html documentation.
This is only needed if "doxygen" is installed and you
do not want to build the html documentation.
--enable-libpulse: Enables support for
Pulseaudio for audio output.
--enable-libplacebo: Enables support for
libpulse for hardware accelerated
color spaces.
gcc tools/qt-faststart.c -o tools/qt-faststart: This
builds the qt-faststart program which can modify
QuickTime formatted movies (.mov
or .mp4) so that the header
information is located at the beginning of the file instead of the end.
This allows the movie file to begin playing before the entire file has
been downloaded.
![[Note]](../images/note.png)
Note
Support for most of the dependency packages requires using options
passed to the configure script. View the output
from ./configure --help for complete information
about enabling dependency packages.
Contents
Installed Programs:
ffmpeg, ffplay, ffprobe, and qt-faststart
Installed Libraries:
libavcodec.so, libavdevice.so, libavfilter.so,
libavformat.so, libavutil.so, libpostproc.so,
libswresample.so, and libswscale.so
Installed Directories:
/usr/include/libav{codec,device,filter,format,util},
/usr/include/libpostproc,
/usr/include/libsw{resample,scale},
/usr/share/doc/ffmpeg-8.0.1, and
/usr/share/ffmpeg
Short Descriptions
ffmpeg |
is a command-line tool to convert video files, network streams and
input from a TV card to several video formats
|
ffplay |
is a very simple and portable media player using the
ffmpeg libraries and the SDL library
|
ffprobe |
gathers information from multimedia streams and prints it in a human
and machine-readable fashion
|
qt-faststart |
moves the index file to the front of quicktime (mov/mp4) videos
|
libavcodec.so
|
is a library containing the FFmpeg codecs
(both encoding and decoding)
|
libavdevice.so
|
is the FFmpeg device handling library
|
libavfilter.so
|
is a library of filters that can alter video or audio between the
decoder and the encoder (or output)
|
libavformat.so
|
is a library containing the file formats handling (mux and demux
code for several formats) used by ffplay as well
as allowing the generation of audio or video streams
|
libavresample.so
|
is a library containing functions for resampling audio and video.
|
libavutil.so
|
is the FFmpeg utility library
|
libpostproc.so
|
is the FFmpeg post processing library
|
libswresample.so
|
is the FFmpeg audio rescaling library,
it contains functions for converting audio sample formats
|
libswscale.so
|
is the FFmpeg image rescaling library
|