因为工作需要,需要编译使用ffmpeg,把整个过程整理了一下,发出来希望对网友有用
一、下载ffmpeg源代码
1.官网下载源码(http://ffmpeg.org/),我下载了ffmpeg.7.0.1.tar.xz版本
使用 tar -xvf ./ffmpeg.7.0.1.tar.xz
二、开始配置编译选项:
使用configure命令,使用默认配置:
cd ffmpeg-7.0.1
./configure
提示nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
在编译ffmpeg之前我们需要安装各种依赖包,而依赖哪些外部包,这个取决于我们的./configure时候的参数,我们的配置参数如下:
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-libfreetype --enable-libharfbuzz --enable-filter=drawtext --enable-libmp3lame --enable-librtmp --enable-libass --enable-libfribidi --enable-fontconfig
(上面的配置意味着我们需要支持x264,x265,mp3,rtmp,drawtext以及ass/srt字幕等功能)
三、下载、编译、安装依赖的第三方包:
3.1 下载,编译,安装nasm包:
该第三方包在编译ffmpeg的基础包的过程中需要使用到。下载地址为:
该包用于编译ffmpeg以及部分编码器比如h.264,h.265等编码器中的x86汇编代码(部分老版本中使用yasm,可以根据configure命令的错误提示来判断是否需要安装yasm,yasm下载地址在The Yasm Modular Assembler Project)
下载 nasm-2.16.03.tar.gz
解压:
tar -xvzf nasm-2.16.03.tar.gz
cd nasm-2.16.03
执行配置命令:
./configure
使用默认配置选项,安装路径等,配置完成之后,执行编译和安装命令:
make
sudo make install
编译成功的nasm会安装到默认路径下/usr/local/bin
(注如果是准备仅使用默认编译选项编译ffmpeg,在安装完nasm之后,即可开始编译)
3.2 下载,编译,安装x.264编码器包
ffmpeg工程中,只实现了h.264,h.265的解码器,没有实现对应的编码器,所以如果需要相关的功能,需要安装x.264,x.265编码器
x.264编码器可以在https://www.videolan.org网站上下载,
x.264的下载地址为:
x264, the best H.264/AVC encoder - VideoLAN
下载
x264-master.tar.bz2
使用如下命令解压:
tar -xvzf x264-master.tar.bz2
执行配置命令:
./configure --enable-static --enable-lto
意思为:生成静态库(后续编译生成ffmpeg,使用时可以不用管x264的so文件,方便使用), 启用链接时优化。如果要查看有什么编译选项可用,./configure --help 命令查看。安装路径使用默认的。
编译安装:
make
sudo make install
此处注意:
这里的x264.pc这个文件是安装到 /usr/local/lib/pkgconfig目录下,这个目录默认是不在pkg-config的搜索目录中的,可能会导致在配置编译ffmpeg的时候失败。所以需要做一些特殊处理。
确认/usr/local/lib/pkgconfig是否在pkg-config的搜索目录的方法如下,执行如下命令:
pkg-config --cflags --libs x264
结果如下:
说明pkg-config命令未能找到x264.pc,解决方法如下:
1)将x264.pc移动到/usr/share/pkgconfig/目录下,如下
2)修改pkg-config命令的搜索目录,命令如下:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
如果能使用pkg-config --cflags --libs x264获得正确的inlcude目录,库目录,库文件名,说明x.264已经安装成功
3.3 下载,编译,安装x.265编码器包
X265编码器官网为x265 HEVC Encoder / H.265 Video Codec,
可以再官网下载,也可以在x265, the free H.265/HEVC encoder - VideoLAN(
https://www.videolan.org/developers/x265.html
)下载。
下载:
x265_3.6.tar.gz
执行命令解压:
tar -xvzf x265_3.6.tar.gz
编译:
cd x265_3.6
cd build
cd linux
./make-Makefiles.bash
在界面中选择编译选项。(个人选择生成静态库,release版本)选择完成后,按g生成makefile等。
make
make install
此处注意x265.pc文件的处理:
将其移动到/usr/share/pkgconfig目录下
3.4 下载,编译,安装libmp3lame编码器
libmp3lame编码器下载地址:
lame-3.100.tar.gz
执行命令解压:
tar -xvzf lame-3.100.tar.gz
./configure --enable-static --enable-shared=no
make clean all
sudo make install
3.5 下载,编译,安装librtmp编码器
librtmp 官网:RTMPDump
通过git下载代码
git clone git://git.ffmpeg.org/rtmpdump
进入代码目录,执行
make clean all
sudo make install
sudo mv /usr/local/lib/pkgconfig/librtmp.pc /usr/share/pkgconfig/
3.6 下载,编译,安装freetype库HarfBuzz库
注意:freetype和HarfBuzz两个库是存在互相依赖的情况的,在配置相关的配置文件的时候,如果没有明确指明参数时会互相检测另外一个库的存在与否,所以建议按照顺序来配置,编译,安装对应的库。我们的安装过程中是先编译安装freetype库,然后再编译安装Harfbuzz库。如果在编译安装Harfbuzz库之后,需要重新配置(执行configure命令)freetype库,建议在configure命令中指明不使用harfbuzz。
freetype下载地址为:
https://freetype.org/download.html
执行命令解压文件:
tar -xvzf freetype-2.13.2.tar.gz
配置freetype
./configure --enable-static --enable-shared=no --with-harfbuzz=no
make clean all
sudo make install
sudo mv /usr/local/lib/pkgconfig/freetype2.pc /usr/share/pkgconfig/
harfbuzz下载地址为:
GitHub - harfbuzz/harfbuzz: HarfBuzz text shaping engine
tar -xvf harfbuzz-9.0.0.tar.xz
最近版本的harfbuzz已经使用meson来管理编译,所以需要安装python3以上版本(python的版本要求3.7以上).
并安装meson和ninja,建议以root用户安装meson和ninja,不然在执行meson install 命令时有可能出错。
安装的命令如下
sudo pip3 install meson
sudo pip3 install ninja
运行meson configure 查看有哪些配置可选项
执行配置命令:
meson setup --reconfigure --buildtype release --default-library static ./build ./
ninja -C build
meson install -C build
sudo mv ./build/meson-private/harfbuzz.pc /usr/share/pkgconfig/
安装完成
3.7 下载编译安装libfribidi
下载地址:Releases · fribidi/fribidi · GitHub
解压文件:
tar -xvzf fribidi-1.0.15.tar.gz
配置libfribidi
meson setup --reconfigure --buildtype release --default-library static -Ddocs=false ./build ./
ninja -C build
meson install -C build
sudo mv /usr/local/lib64/pkgconfig/fribidi.pc /usr/share/pkgconfig/
3.8下载编译libexpat:
xml解析库,如果不使用expat就需要使用libxml2库
官网页面:
Welcome to Expat! · Expat XML parserExpat XML parserhttps://libexpat.github.io/
下载地址:
配置libexpat库
./configure --enable-shared=no --enable-static=yes
make
sudo make install
sudo mv /usr/local/lib/pkgconfig/expat.pc /usr/share/pkgconfig/
3.9下载编译安装libfontconfig
下载地址:https://www.linuxfromscratch.org/blfs/view/svn/general/fontconfig.html
除依赖libexpat库,另外依赖gnu的gperf工具,可以通过yum来进行安装,如果需要通过源代码的形式来安装,可以在gperf - GNU Project - Free Software Foundation (FSF)下载,并进行编译。
配置libfontconfig
./configure --enable-shared=no --enable-static=yes
make
sudo make install
sudo mv /usr/local/lib/pkgconfig/fontconfig.pc /usr/share/pkgconfig/
3.10 下载编译安装libass
依赖:libfribidi
解压文件:
tar -xvzf libass-0.17.3.tar.gz
配置libass:
./configure --enable-shared=no --enable-static=yes
make
sudo make install
sudo mv /usr/local/lib/pkgconfig/libass.pc /usr/share/pkgconfig/
4.编译ffmpeg
进入ffmpeg目录,执行命令进行配置
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-libfreetype --enable-libharfbuzz --enable-filter=drawtext --enable-libmp3lame --enable-librtmp --enable-libass --enable-libfribidi --enable-fontconfig
中间可能还会报错,比如
此时需要查看ffbuild/config.log
从日志可以看错,在编译一个测试代码链接x265库的时候,出错了,出现了大量的未链接符号,从错误信息来看,应该是缺少了-lstdc++库
调整为:
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-libfreetype --enable-libharfbuzz --enable-filter=drawtext --enable-libmp3lame --enable-librtmp --enable-libass --enable-libfribidi --enable-fontconfig --extra-libs="-lexpat -lstdc++ -lpthread -lm -ldl"
make
完成编译