ffmpeg的编译

因为工作需要,需要编译使用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的基础包的过程中需要使用到。下载地址为:

https://www.nasm.us/

该包用于编译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

(http://www.x265.org/)

可以再官网下载,也可以在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 MP3 Encoder

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 parsericon-default.png?t=N7T8https://libexpat.github.io/

下载地址:

Releases · libexpat/libexpat · GitHub:herb: Fast streaming XML parser written in C99 with >90% test coverage; moved from SourceForge to GitHub - Releases · libexpat/libexpaticon-default.png?t=N7T8https://github.com/libexpat/libexpat/releases

配置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

下载地址:GitHub - libass/libass: libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format.

解压文件:

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

完成编译

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值