博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffmpeg---ffmpeg + x264 + fdk-aac + mp3lame 安装
阅读量:3920 次
发布时间:2019-05-23

本文共 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则不需要

1、ffmpeg安装

1.1 下载ffmpeg

①从ffmpeg官网:http://ffmpeg.org/download.html下载最新的ffmpeg安装包,然后通过如下命令解压:tar jxf ffmpeg-4.2.1.tar.bz2

②用Git从github下载

1.2 支持

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 中。

1.3 配置ffmpeg

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

1.4 编译&安装

make   			→→在解压目录生成ffmpeg ffplay等文件make install	→→在目标安装位置出现文件# 如无意外,很快会在/usr/local/ffmpeg目录中安装文件,文件结构如下:# bin/	ffmpeg主程序二进制目录   	必有:		ffmpeg ffprobe 	选择性编译:	ffplay ffserver sdl2-config  vsyasm  yasm  ytasm# lib/	库文件目录# include/	C/C++头文件目录# share/	文档目录# 四个目录

1.5 问题:无法查看版本号👈lib目录未加载到链接到系统库

然后进入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即可

2、x264外部库

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

在这里插入图片描述

3、ffmpeg环境变量设置和安装后不能加载共享库的错误解决

例如: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,如果获得有关版本信息则配置成功

3、fdk-aac

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]

4、

//这个库印象中没有安装,但却enable了?

你可能感兴趣的文章
考虑用Task.WhenAll
查看>>
关于面试,避开这几点,成功几率更大~~~
查看>>
通过反射实现IOC功能
查看>>
堵俊平:开放治理是开源社区的终极之路 | DEV. Together 2021 中国开发者生态峰会...
查看>>
Linux实操--实用指令Day3
查看>>
Mysql 事务处理
查看>>
Linux实操--实用指令Day4
查看>>
Linux实操--实用指令Day3
查看>>
spring+springboot认识
查看>>
Leetcode 136. 只出现一次的数字
查看>>
Leetcode 11. 盛最多水的容器
查看>>
Leetcode 121. 买卖股票的最佳时机
查看>>
Leetcode 123. 买卖股票的最佳时机 III
查看>>
Leetcode 24. 两两交换链表中的节点
查看>>
Leetcode 100. 相同的树
查看>>
Leetcode 257. 二叉树的所有路径
查看>>
Leetcode 4. 寻找两个正序数组的中位数
查看>>
Leetcode 101. 对称二叉树
查看>>
Leetcode 108. 将有序数组转换为二叉搜索树
查看>>
Leetcode 303. 区域和检索 - 数组不可变
查看>>