ffmpeg的一些使用心得
一些特定场景下的问题分析(速度质的变化)
执行的ffmpeg转码任务时执行过慢
大家有没有遇到过一个问题 我在自己的mac电脑上进行开发测试的时候发现处理一套素材转码的时候速度还可以接受 但是一到服务器上转码的效率就变得奇慢无比 是不是以为是服务器性能配置的问题 接下来我们来分析一下具体原因
- 首先我们保证了代码的一致性所以排除了代码逻辑问题
- 我们保证的服务器与本地机器上ffmpeg的版本一直的问题
那么问题到底出现在哪里呢
揭晓答案:
[libx264 @ 0x7f9638814600] using SAR=1/1
[libx264 @ 0x7f9638814600] using cpu capabilities: none
[libx264 @ 0x7f9638814600] profile High, level 4.0, 4:2:0, 8-bit
在上面的第二行是因为我们在服务器上变异x264相关的动态库时候出现了错误,所以导致我们命令中使用x264时使用不到cpu的加速性能 导致我们执行的速度太慢 那么我们该如解决呢
- 首先我们需要从新编译一下x264的动态库 需要注意的是./configure 的时候 提示 disable nasm 这个时候 千万不要disable
- 然后我们重新编译ffmpeg
./configure --enable-gpl --enable-encoder=libx264 --enable-libx264 --prefix=/usr/local/ffmpeg --enable-debug --enable-static --enable-libass --enable-fontconfig --extra-libs=-ldl --enable-libmp3lame
注意这个时候可能会有一些报错信息出来 比如 braries: libx264.so.138: cannot open shared object file: No such file or directory
或者是其他的so找不到 这个时候我们需要这么处理呢
- 查询我们这个x264或者报错的动态库所在的位置
find / -name 文件名
- 添加环境变量
export PKG_CONFIG_PATH=查找到的路径
- 如果第二种没有解决你的问题 那么
vi /etc/ld.so.conf
然后添加所在路径到文件内
例如:
include ld.so.conf.d/*.conf
/usr/local/x264/lib #查找到的路径
执行wq保存 最后别忘了执行 ldconfig
这样一套操作下来 按照我自己的亲身经历来看 速度最少是快了 7 8 倍左右 一点没有夸张
一些开发过程的优化
在我们开发的过程中为了方便我们的开发 经常会把ffmpeg的使用变成一条线型的操作 举个例子
ffmpeg -i test.mp4 -vf fade=type=in:0:30 1.mp4
ffmpeg -i 1.mp4 -vf fade=type=out:29:1 out.mp4
但是这样是不对的 这样会把 整体的转码任务拉长 我们需要做的是
将我我们-vf 内的命令进行拼接 中间采用,进行分割 形成如下
ffmpeg -i test.mp4 -vf 'fade=type=in:0:30,type=out:29:1' -c:v libx264 -pix_fmt yuv420p -y out.mp4
这样一来整体的速度又提升了
总结
这都是我自己在使用中碰到的一些问题 希望分享出来 给大家 让大家少走一点弯路