ffmpeg命令行参数优化

我测试了下ffmpeg直播流的转码延时,这些参数对文件的转码也是通用的;

测试环境:
 . ffmpeg 版本为v3.0.2
 . 从同一台服务器拉流,转码再推送到同一台服务器上,这样减少了服务器与网络影响;
 . 播放器使用实时模式,不缓冲

1. 设置slow参数
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset slow -b:v 400k -s 720x576 -r 25 
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst

设置了这个参数(-preset slow)后,延时大概在10.6 – 12.1 秒,
但它的图像质量会好

Fig-1 slow-3

2. 不设置优化参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -b:v 400k -s 720x576 -r 25 
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在1.6 – 2.6秒

Fig-2 no-setting-3

3.设置fast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset fast -b:v 400k -s 720x576 -r 25 
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在2.1 – 2.2秒

Fig-3 fast-2

4. 设置ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25 
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst

这样设置后延时会大大减小,但图像质量会变差得很明显;
延时大概在0.6 – 0.8 秒

Fig-4 ultrafast-3

5. 设置zerolatency和ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -tune zerolatency -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25 
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst

这样设置后延时还会减小,但图像质量会变差得很明显;
延时大概在0.2 – 0.6 秒

Fig-5 zerolatency-ultrafast-2

总结:
ffmpeg设置转码延时的参数和步骤如下:
 . 关闭sync-lookahead
 . 降低rc-lookahead,但别小于10,默认是-1
 . 降低threads(比如从12降到6)
 . 禁用rc-lookahead
 . 禁用b-frames
 . 缩小GOP, 
 . 开启x264的 -preset fast/faster/verfast/superfast/ultrafast参数
 . 使用-tune zerolatency 参数




你可能感兴趣的:(ffmpeg)