本文共 5330 字,大约阅读时间需要 17 分钟。
>ffmpeg4.2.1版本遇到问题:/usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against .rodata' can not be used when making a shared object; recompile with -fPIC 解决方法:在x264和ffmpeg-4.2.1配置的时候均也添加pic支持(位置无关) 1、x264配置:./configure --enable-shared --prefix=/home/aston/ffmpeg-all/x264-enable-pic --disable-asm --enable-pic 2、ffmpeg-4.2.1配置:./configure --prefix=/home/aston/ffmpeg-all/ffmpeg-4.2.1-install --enable-shared --enable-ffplay --enable-libx264 --enable-gpl --disable-x86asm --extra-cflags="-I/home/aston/ffmpeg-all/x264-enable-pic/include" --extra-ldflags="-L/home/aston/ffmpeg-all/x264-enable-pic/lib" --enable-pic //--extra-cflags 后面跟引入头文件目录 //--extra-ldflags后面跟引入库目录。(这里用于包含外部x264库地址) //ffmpeg-3.3.1则不需要
①从ffmpeg官网:http://ffmpeg.org/download.html下载最新的ffmpeg安装包,然后通过如下命令解压:tar jxf ffmpeg-4.2.1.tar.bz2
②用Git从github下载1、yasm:可以视为一个汇编编译器,负责编译ffmpeg中的汇编代码
1、跳过yasm:在配置时--disable-yasm//网上也有跳过汇编代码的做法,但是我在后面实际使用过程中可能会遇到必须要汇编代码的情况2、安装yasm:# CentOS sudo yum install yasm# Ubuntu sudo apt-get install yasm
2、安装sdl1.2和2.0👉否则无法生成ffplay
注意:默认设置是不生成ffplay的:
1、configure生成的ffbulie/config.mak文件中的关于FFPLAY的一行前面有感叹号:!CONFIG_FFPLAY=yes 2、config.h中的宏定义: 599行 #define CONFIG_FFPLAY 0
安装sdl1.2十分方便,直接通过apt-get进行:
sudo apt-get install libsdl1.2-dev 如果不行(依赖项 版本等问题) 用aptitude代替anpt-get安装
在官网上去下载sdl2.0:http://www.libsdl.org/download-2.0.php
或者https://download.csdn.net/download/franklin008/10226519下载连接 解压 tar -zxvf SDL2-2.0.6.tar.gz 解压后cd进目录,依次执行: ./autogen ./configure make sudu make install →→库文件在 /usr/local/lib中 头文件在 /usr/local/include/SDL2 中。
配置文件configure的相关命令可用./configure --help ->name.txt 输出重定向至txt查看
0 ./configure1 --prefix=/home/aston/ffmpeg-all/ffmpeg //安装位置2 --enable-shared --enable-pic 这里选择生成动态库.so(而静态库文件貌似必定生成) //生成动态链接库,因为共享库的代码都是位置无关的,所以通常还需要附带fPIC。3 --enable-ffplay //默认配置ffbulid/config.mak中是!CONFIG_FFPLAY=yes //因为config.h中的宏定义: 599行 #define CONFIG_FFPLAY 0【即不生成ffplay】4 --enable-gpl 解释: https://blog.csdn.net/ericbar/article/details/81079955//配置文件configure中: --enable-libmp3lame enable MP3 encoding via libmp3lame [默认no]总: ./configure --prefix=/home/aston/ffmpeg-all/ffmpeg --enable-shared --enable-ffplay
make →→在解压目录生成ffmpeg ffplay等文件make install →→在目标安装位置出现文件# 如无意外,很快会在/usr/local/ffmpeg目录中安装文件,文件结构如下:# bin/ ffmpeg主程序二进制目录 必有: ffmpeg ffprobe 选择性编译: ffplay ffserver sdl2-config vsyasm yasm ytasm# lib/ 库文件目录# include/ C/C++头文件目录# share/ 文档目录# 四个目录
然后进入bin目录,执行 ./ffmpeg -version 查看当前版本的详细信息发现报错: libavdevice.so.57: cannot open shared object file: No such file or directory原因是lib目录未加载到链接到系统库中,系统ld目录列表在/etc/ld.so.conf中,打开文件会发现,内容是include /etc/ld.so.conf.d//.conf即引用了/etc/ld.so.conf.d/下面所有的.conf文件,比如mariadb-x86_64.conf应对: 我们只需要创建一个文件并写入lib路径即可 执行命令: 创建并打开vim /etc/ld.so.conf.d/ffmpeg.conf 然后添加一行内容: 【ffmpeg/lib的pathname】/home/aston/ffmpeg-all/ffmpeg/lib 之后保存并退出, 然后执行 ldconfig 使配置生效,现在再次执行查看版本号【ffmpeg -version】->显示就正常了//类似的x264库也可能出现这个问题->导致./ffmpeg -version时报错找不到libx264.so.159z找不到
查询版本号:./ffmpeg -version
中途可能会报错:WARNING: using libx264 without pkg-config
因为yum安装x264时,没有自动给我们加入环境变量,执行:export PKG_CONFIG_PATH=/home/sxm-download/x264-master:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH解决 //这个命令中/usr/local/lib/pkgconfig目录在安装sdl2后会包含sdl2.pc //而在x264库解压配置文件夹能够找到x264.pc 将其地址/home/sxm-download/x264-master:导出到PKG_CONFIG_PAT即可
1、配置:./configure --enable-shared --prefix=/home/aston/ffmpeg-all/x264 --enable-pic --disable-asm //ffmpeg-4.2.1再外接x264时会要求--enable-pic生成位置无关代码 (旧版本貌似没有这个要求)//要么--disable-asm 要么安装nasm//ffmpeg外接x264需要的时x264库额动态版本 故需要--enable-shared//--disable-asm 或者--no-asm都代表不会编译x264库的汇编部分 后面可能会遇到问题 最好还是编译一下2、make && make install在安装位置会出现如下3个文件夹:1、bin 2、include (x264.h及x264_config.h)3、lib (libx264.a 静态库[好多个.o合在一起] libx264.so动态库[shared object] )要外接x264库,就需要在ffmpeg配置时进行相关配置:./configure --prefix=/home/aston/ffmpeg-all/ffmpeg-4.2.1-install --enable-shared --enable-ffplay --enable-libx264 --enable-gpl --disable-x86asm --extra-cflags="-I/home/aston/ffmpeg-all/x264-enable-pic/include" --extra-ldflags="-L/home/aston/ffmpeg-all/x264-enable-pic/lib" --enable-pic//ffmpeg要使用--enable-shared 不然会找不到x264
配置好后会打印如下显示:表示已经包含了外部库x264
例如:ffmpeg的安装目录为usr/local/ffmpeg,所以需要设置环境变量,以下设置仅对当前用户有效,若想对所有用户有效,则应该设置在/etc/profile下。。。添加环境变量1、打开终端输入sudo vim ~/.bashrc2、在其末尾添加export PATH=$PATH:/usr/local/ffmpeg/bin3、source ~/.bashrc //使其立即生效,在终端执行或者重新启动电脑即可。4、校验:查看ffmpeg是否安装成功ffmpeg --help出现ffmpeg: error while loading shared libraries: libavdevice.so.56: cannot open shared object file: No such file or directory用ldd命令查看缺少什么库其中就有缺少上面的libavdevice.so.56然后find搜索这些库在什么地方find / -name "libavdevice.so.56"可以查到在/usr/local/ffmpeg/lib/libavdevice.so.56下8.添加这些库vim /etc/ld.so.conf在此文件下添加/usr/local/ffmpeg/lib其中/usr/local/ffmpeg就是刚才安装的位置最后使用命令:sudo ldconfig通过在终端下,输入ffmpeg,如果获得有关版本信息则配置成功
ffmpeg编译的时候报错:
Unknown option “–enable-libfaac” 官方给了说明:https://github.com/BrewTestBot/homebrew-core/commit/c5c6006e5092c3dae6c9fc27003078251ab4cbbb 3.2之后的版本不再支持libfaac了,换成fdk-aac了 下载最新的fdk-aac 然后编译:
https://sourceforge.net/projects/opencore-amr/files/fdk-aac/./configuremake sudo make install
成功后,只要把ffmpeg编译的configure选项里面–enable-libfaac替换成–enable-libfdk-aac,重新编译即可。
3.2之后的configure文件中:–enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
//这个库印象中没有安装,但却enable了?