从官方下载的源代码编译后,使用ffmpeg -encoders查看支持的编码器。
ffmpeg 源码编译x264、x265、fdk-aac、cuda编解码。
1.编译x264
1)下载x264源码,参考网站:
https://code.videolan.org/videolan/x264
或者https://code.videolan.org/videolan/x264/-/tree/stable
2)解压缩,进入文件目录,里面包含有文件configure,编译动态库加上--enable-shared,路径在/usr/下,以便编译ffmpeg时能够找到。执行 ./configure --enable-shared --prefix=/usr/
1 | ./configure --enable-shared --prefix=/usr/ |
3) 然后编译,终端执行命令 make
1 | make |
4)安装,执行命令 make install,如果没有使用root权限,则执行命令 sudo make install
1 | sudo make install |
完成后,你能够在/usr/include 中找到x264相关.h文件,在/usr/lib/找到libx264相关.so文件。
2.编译x265
1)下载x265源码,我从github下载的源码。参考网址:
https://github.com/videolan/x265
2)解压进入路径,执行命令 cd x265-master/build/linux ,在该路径下,有一个脚本文件make-Makefiles.bash
3)执行命令 ./make-Makefiles.bash
1 | ./make-Makefiles.bash |
4)现在生成了Makefile文件,编译,执行命令 make
1 | make |
5)执行安装命令 sudo make install ,查找了一下,文件应该默认安装在了/usr/local/目录下,分别在/usr/local/include 和 /usr/local/lib中找到头文件和库文件。
1 | sudo make install |
3.编译 libfaac,为ffmpeg 音频编码做准备。
1)源码下载
https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz
2)解压进入文件,我的版本文件名为fdk-acc-2.0.1,执行文件 ./autogen.sh
1 | ./autogen.sh |
3)执行命令 ./configure --enable-shared --prefix=/usr/
1 | ./configure --enable-shared --prefix=/usr/ |
4)编译,make
1 | make |
5) 安装库 sudo make install
1 | sudo make install |
4.支持cuda硬编解码
1)jetson agx xavier设备刷机时就安装了cuda和cudnn,如果你的设备不是jestson系列,可能需要:首先需要安装驱动,然后安装cuda和cudnn,在网上看到一篇博客,可以参考https://hewei.blog.csdn.net/article/details/81303876
2)下载nvenc的头文件。
https://github.com/FFmpeg/nv-codec-headers
3)下载后解压,进入目录
编译并安装
1 2 | make make install |
完成后,在/usr/local/include/路径包含文件ffnvcodec
5.编译ffmpeg
1)官网下载源码,或者从网址 下载,支持h265推落流由可以从我的csdn下载ffmpeg3.4.8源码https://download.csdn.net/download/qfxx_CSDN/13119978
2)这时需要把ffnvcodec.pc的路径加入环境变量中,否则会报错 ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
好吧,我的实际情况是我的还是会报以上错误。因为我尝试编译ffmpeg4.2,由https://superuser.com/questions/1415074/error-cuda-requested-but-not-all-dependencies-are-satisfied-ffnvcodec受到启发,换成版本ffmpeg3.4.8就成功了。
3) ./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-cuda --enable-cuvid --enable-nvenc --disable-programs --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265
4) make
5) sudo make install
5)修改文件/etc/ld.so.conf 内容增加/usr/local/ffmpeg/lib/ ,保存退出。
再输入ldconfig使修改生效。
参考博客:
https://blog.csdn.net/quantum7/article/details/104460115/
https://blog.csdn.net/dongkaiwen48/article/details/102808113
https://blog.csdn.net/A199222/article/details/103233935
https://superuser.com/questions/1415074/error-cuda-requested-but-not-all-dependencies-are-satisfied-ffnvcodec