FFmpeg-5.1.2
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 11.3 platform.
Package Information
Download (HTTP): https://ffmpeg.org/releases/ffmpeg-5.1.2.tar.xz
Download MD5 sum: fa847c43407315c27231b9f883e62c0e
Download size: 9.5 MB
Estimated disk space required: 184 MB (add 1.7 GB for the FATE suite/tests, add 766 MB for documentation)
Estimated build time: 1.3 SBU (using parallelism=4; add 3.7 SBU (with THREADS=4) to run the FATE suite after sample files are downloaded; add 0.3 SBU for doxygen docs)
Additional Downloads
FFmpeg Dependencies
Recommended
libass-0.17.0,
fdk-aac-2.0.2,
FreeType-2.13.0,
LAME-3.100,
libtheora-1.1.1,
libvorbis-1.3.7,
libvpx-1.13.0,
Opus-1.3.1,
x264-20230215,
x265-20230215, and
NASM-2.16.01 or yasm-1.3.0
Recommended for desktop use
alsa-lib-1.2.8,
libva-2.17.0,
libvdpau-1.5 (with the corresponding driver package), and
SDL2-2.26.3
Optional
Doxygen-1.9.6,
Fontconfig-2.14.2,
FriBidi-1.0.12,
frei0r-plugins-1.8.0,
libcdio-2.1.0 (to identify and play CDs),
libdrm-2.4.115 (for “kmsgrab” input),
libwebp-1.3.0,
opencv-4.7.0,
OpenJPEG-2.5.0,
GnuTLS-3.8.0,
PulseAudio-16.1,
Samba-4.17.5,
Speex-1.2.1,
texlive-20220321
(or install-tl-unx) for PDF and PS documentation,
v4l-utils-1.22.1,
XviD-1.3.7,
a graphical environment,
Flite,
GSM,
libaacplus,
libbluray,
libcaca,
libcelt,
libdc1394,
libdca,
libiec61883,
libilbc,
libmodplug,
libnut (Git checkout),
librtmp,
libssh,
OpenAL,
OpenCore AMR,
Srt,
Schroedinger,
TwoLAME,
vo-aaenc,
vo-amrwbenc, and
ZVBI
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ffmpeg
Installation of FFmpeg
First, apply a patch that adds an API necessary for some packages to
build:
patch -Np1 -i ../ffmpeg-5.1.2-chromium_method-1.patch
Install FFmpeg by running the following
commands:
sed -i 's/-lflite"/-lflite -lasound"/' configure &&
./configure --prefix=/usr \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-static \
--enable-shared \
--disable-debug \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-openssl \
--docdir=/usr/share/doc/ffmpeg-5.1.2 &&
make &&
gcc tools/qt-faststart.c -o tools/qt-faststart
HTML documentation was built in the previous step. If you have
texlive-20220321 installed and wish to build PDF and
Postscript versions of the documentation, issue the following commands:
pushd doc &&
for DOCNAME in `basename -s .html *.html`
do
texi2pdf -b $DOCNAME.texi &&
texi2dvi -b $DOCNAME.texi &&
dvips -o $DOCNAME.ps \
$DOCNAME.dvi
done &&
popd &&
unset DOCNAME
If you have Doxygen-1.9.6 installed
and you wish to build (if --disable-doc was
used) or rebuild the html documentation, issue:
doxygen doc/Doxyfile
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, as the root
user:
make install &&
install -v -m755 tools/qt-faststart /usr/bin &&
install -v -m755 -d /usr/share/doc/ffmpeg-5.1.2 &&
install -v -m644 doc/*.txt /usr/share/doc/ffmpeg-5.1.2
If the PDF and Postscript documentation was built, issue the following
commands, as the root
user, to
install them:
install -v -m644 doc/*.pdf /usr/share/doc/ffmpeg-5.1.2 &&
install -v -m644 doc/*.ps /usr/share/doc/ffmpeg-5.1.2
If you used doxygen to manually create the API
documentation, install it by issuing the following commands
as the root
user:
install -v -m755 -d /usr/share/doc/ffmpeg-5.1.2/api &&
cp -vr doc/doxy/html/* /usr/share/doc/ffmpeg-5.1.2/api &&
find /usr/share/doc/ffmpeg-5.1.2/api -type f -exec chmod -c 0644 \{} \; &&
find /usr/share/doc/ffmpeg-5.1.2/api -type d -exec chmod -c 0755 \{} \;
To properly test the installation you must have rsync-3.2.7
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 3800
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
and total amount at the end.
Command Explanations
sed -i ... configure: This command adds the
ALSA library to the
Flite LDFLAGS
variable and
enables the discovery of Flite.
find ... ;: Fixes permissions of documentation files
and directories.
--enable-libfreetype
: Enables
Freetype support.
--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-libass
: Enables ASS/SSA subtitle format
rendering via libass
.
--enable-libdrm
: Use this switch if
libdrm-2.4.115 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-libmp3lame
: Enables MP3 audio encoding
via libmp3lame
.
--enable-libvorbis --enable-libtheora
: Enables
Theora video encoding via libvorbis
and libtheora
.
--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.
--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-1.9.6 is installed and you
do not want to build the html documentation.
--enable-libpulse
: Enables support for
Pulseaudio for audio output.
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
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-5.1.2, 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
|