使用ffmpeg编码时,如何设置恒定码率,并控制好关键帧I帧间隔
2014-10-07 20:46
155 查看
1. 大家在使用ffmpeg进行视频编码时,使用-b命令,想控制比特率,却发现结果并没有如我们设置所愿,通过码流分析器观察视频码流,码率的波动还是很大的,ffmpeg控制的并不好,这时候,我们可以通过以下命令解决:
-maxrate biterate -minrate biterate -bf 1 -b_strategy 0
其中 -maxrate、-minrate为设置最小最大比特率,-bf为设置B帧数目,其实就是设置编码是B、P、I帧的结构,我这里设置的为IPBPBP结构,-b_strategy这个命令是为了自适应的添加B帧数目,ffmpeg编码器会根据视频的应用场景,自适应的添加B帧,通过设置-b_strategy
0,将这个功能关闭,那么就会根据你的设置要求进行编码。除此之外,还可以使用-pass,进行2次码率控制,编出来的视频效果更好;下面我介绍-pass的使用方法:
(1)-pass 1 -passlogfile ffmpeg2pass 第一步先编一次,生成 ffmpeg2pass 文件
(2)-pass 2 -passlogfile ffmpeg2pass 第二次会根据第一次生成的ffmpeg2pass 文件,再进行码率控制。
2. 如何设置视频关键帧I帧间隔问题
刚开始我只使用-g命令,设置GOP长度,编码后,发现I帧间隔长度并不是我想要的,后来我通过以下命令问题解决了:
-keyint_min 60 -g 60 -sc_threshold 0
其中-keyint_min为最小关键帧间隔,我这里设置为60帧;-sc_threshold这个命令会根据视频的运动场景,自动为你添加额外的I帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度,这是只要将它设为0,问题就得到解决了!!
我也是菜鸟,恰好用到了ffmpeg,出现了这些问题,希望对你们有帮助~~
-maxrate biterate -minrate biterate -bf 1 -b_strategy 0
其中 -maxrate、-minrate为设置最小最大比特率,-bf为设置B帧数目,其实就是设置编码是B、P、I帧的结构,我这里设置的为IPBPBP结构,-b_strategy这个命令是为了自适应的添加B帧数目,ffmpeg编码器会根据视频的应用场景,自适应的添加B帧,通过设置-b_strategy
0,将这个功能关闭,那么就会根据你的设置要求进行编码。除此之外,还可以使用-pass,进行2次码率控制,编出来的视频效果更好;下面我介绍-pass的使用方法:
(1)-pass 1 -passlogfile ffmpeg2pass 第一步先编一次,生成 ffmpeg2pass 文件
(2)-pass 2 -passlogfile ffmpeg2pass 第二次会根据第一次生成的ffmpeg2pass 文件,再进行码率控制。
2. 如何设置视频关键帧I帧间隔问题
刚开始我只使用-g命令,设置GOP长度,编码后,发现I帧间隔长度并不是我想要的,后来我通过以下命令问题解决了:
-keyint_min 60 -g 60 -sc_threshold 0
其中-keyint_min为最小关键帧间隔,我这里设置为60帧;-sc_threshold这个命令会根据视频的运动场景,自动为你添加额外的I帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度,这是只要将它设为0,问题就得到解决了!!
我也是菜鸟,恰好用到了ffmpeg,出现了这些问题,希望对你们有帮助~~
相关文章推荐
- 使用ffmpeg编码时,如何设置恒定码率,并控制好关键帧I帧间隔
- 使用ffmpeg编码时,如何设置恒定码率,并控制好关键帧I帧间隔
- 如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式
- Windows 演示设置如何使用命令行控制
- 如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式
- 如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式
- 黄聪:如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式
- iOS开发的一些小技术:让UIImage有缩放功能、控制log的输出、xcode修改文件注释、随机数的使用、在UIImageView 中旋转图像、在Quartz中如何设置旋转点、创建.plist文件并存储
- 如何使用ASP设置指定站点CPU最大使用程度
- 使用IE打印,如何设置默认纸张大小,页边距等?(求救!!)
- 如何使用JAVA 去很好的控制输出的时间
- 在Fedora Core 6中如何设置使用fcitx输入法取代scim
- Eclipse 如何使用版本控制
- 如何使用Red Had Linux8.0设置双网卡代理服务
- 如何在页面中使用Acegi权限集合和taglib控制页面元素
- Eclipse 如何使用版本控制
- 如何设置NetBeans5.5使用的语言
- anjuta的基本使用方法(包括如何设置MYSQL)
- SMS脚本节选六:如何使用站点控制文件