ffmpeg CBR精准码流控制三个步骤

简介: ffmpeg CBR精准码流控制三个步骤

thxchtb3wcn3k_d11fc1ff3db9431d8ad7575e9297ae48.png


x264可以设置VBR和CBR的编码模式,VBR为可变码率,CBR为恒定码率。尽管互联网上VBR居多,但是CBR依然存在。

ffmpeg是通过-b:v来指定视频码率,但这个设定的是平均值,并不能够很好的控制上下波动幅度。如果要控制波动,还需要控制最大码率和最小码率,即-b:v,maxrate,minrate。同时为了更好的控制编码时的波动还可以设置编码时的buffer大小,即设置-bufsize即可。buffer的设置并不是越小越好,而是恰到好处,如1Mbit/s,bufsize设置为50KB,可以很好的控制码率波动。

ffmpeg  -i  input.mp4  -c:v  libx264  -x264opts  "bframes=10:b-adapt=0"   -b:v
1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0
output.ts


下面就来分析一下这条命令行,具体如下。

● 设置B帧的个数,并且是每两个P帧之间包含10个B帧

● 设置视频码率为1000kbit/s

● 设置最大码率为1000kbit/s

● 设置最小码率为1000kbit/s

● 设置编码的buffer大小为50KB

● 设置H.264的编码HRD信号形式为CBR

● 设置每50帧一个GOP

● 设置场景切换不强行插入关键帧

根据上述参数设置之后生成的output.ts文件,使用Bitrate Viewer观察其码率波动效果,结果如图4-6所示。


从图中可以看到码率波动为最小996kbit/s,最大码率为1001kbit/s,码率得到了控制


4f989c5182b8459eb4459f3be4927e26.jpg


补充关于B帧:


如果不希望出现B帧,多用B帧才能使得h264真正压缩率达到200,I帧压缩率最低,P帧中等,B帧最高,因此B帧也会增加编码器负载,但可以减少码率。与不用相比,多用B帧时,同样的码率视频更清晰。


补充:

ABR是VBR和CBR的混合方案,VBR一般用于媒体存储,而不是网络传输,其实网络传输所谓的CBR一般都是ABR,只要单位时间内把码率控制住就可以了。ABR编码在速度上是VBR编码的2到3倍,但低于CBR。

CBR编码的缺点在于质量不稳定,当有运动产生时,质量会下降,尤其是设置的码率较低时更明显。

VBR的优势是当内容简单时,分配的码率就少,当视频复杂时就多分配点码率,因此在相同文件大小时,VBR的视频质量要好于CBR。当两者质量相同时,VBR大小可能只是CBR的一半。


h264编码的帧由大到小依次为:

I > P > B

(互相之间约有5倍的差距)

x264的编码耗时由长到短依次为:

P > B > I

通常而言,较小的帧因为帧内压缩计算量(deblock、cabac等)小,所以耗时相对短。

P帧的编码耗时长是因为帧间压缩(宏块寻找、运动补偿等)耗时长所以提高了总体耗时。


相关文章
|
3月前
|
存储 编解码
FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧
《FFmpeg开发实战》书中介绍了音视频编码历史,重点讲述H.264的成功在于其分为视频编码层和网络抽象层。H.264帧类型包括SPS(序列参数集,含视频规格参数),PPS(图像参数集,含编码参数)和IDR帧(立即解码刷新,关键帧)。SPS用于计算视频宽高和帧率,PPS存储编码设置,IDR帧则标志新的解码序列。书中还配以图片展示各帧结构详情,完整内容可参考相关书籍。
137 7
FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧
|
编解码 并行计算 Linux
LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
628 0
|
编解码 缓存 开发工具
【FFMpeg视频开发与应用基础】三、调用FFmpeg SDK对H.264格式的视频压缩码流进行解码
《FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK》视频教程已经在“CSDN学院”上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 经过了上篇调用FFMpeg SDK对视频进行编码的过程之后,我们可以比较容易地理解本篇的内容,即上一篇的逆过程——将H.264格式的裸码流解码为像素格式的图像信息。
2312 0
|
C语言
FFMPEG 库移植到 VC 需要的步骤
在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步。(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http://ffmpeg.zeranoe.com/builds/)。
942 0
|
开发工具 C++
ffmpeg基础与编译_在VS2008下调试output_example.c(详细步骤)
注意:这个是编译Debug版本的。必要资源:FFMPEG SDK 3.2(已经编译好的,可以去http://www.bairuitech.com/html/ruanjianxiazai/ffmpeg/20080414/89.html下载)1.建立一个空的VC++工程  建立好之后,将FFMPEG SDK 3.2下的output_example.c文件拷贝至路径“%Project Dir%/%Project Name%/”下  其“%Project Dir%”为你所建立的工程的路径,“%Project Name%”为工程名。
1083 0
|
13天前
|
编解码 移动开发 安全
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
自互联网普及以来,流媒体技术特别是视频直播技术不断进步,出现了多种传输协议。早期的MMS由微软主导,但随WMV格式衰落而减少使用。RTSP由网景和RealNetworks联合提出,支持多种格式,但在某些现代应用中不再受支持。RTMP由Adobe开发,曾广泛用于网络直播,但因HTML5不支持Flash而受影响。HLS由苹果开发,基于HTTP,适用于点播。SRT和RIST均为较新协议,强调安全与可靠性,尤其SRT在电视直播中应用增多。尽管RTMP仍占一定市场,但SRT等新协议正逐渐兴起。
46 8
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
|
19天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
50 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP