mediaxyz是一位研究ffmpeg有三年的高人了,这几天一直在折腾ffmpeg中的x264,就是不知道该如何控制码率,主要是参数太多,也不知道该如何设置,在

google上search了一下,这方面的介绍为0,那就找mediaxyz请教请教吧,这些可都是经验,非常宝贵!

以下是与mediaxyz在QQ上聊天的记录,只有一部分,因为QQ把之前的谈话删除了,但基本上精髓都可这里了。

mediaxyz 23:40:26
你说的qsable是c->global_quality吧 
Leon 23:40:44
br值的设定规则,是100kbps 就为 100*1024 吧? 
mediaxyz 23:41:07
yes 
mediaxyz 23:41:26
你有没有发现,ffmpeg是100*1000 
mediaxyz 23:41:37
并不是100*1024 
Leon 23:41:28
是的, 
Leon 23:42:13
我看到有这样一句话:
qscale 以<数值>质量为基础的VBR,取值0.01-255,越小质量越好
mediaxyz 23:42:30
而且在后面的处理中还是/1000 
mediaxyz 23:42:43
是的 
mediaxyz 23:42:51
越小质量越好,码率越大 
Leon 23:42:55
那0.01-255范围也太大了吧! 
mediaxyz 23:43:29
这是为了精细控制,实际上没必要 
mediaxyz 23:43:42
我测试0。01-50就可以了 
mediaxyz 23:43:52
再大图像很糟糕 
Leon 23:43:55
global_quality有什么作用? 
mediaxyz 23:44:18
反正老外总是想的很周到 
mediaxyz 23:44:35
global_quality你说的 <数值>质量 
Leon 23:44:36
就是我说的qscale值? 
mediaxyz 23:45:01
是的 
Leon 23:45:01
这个值能不能动态的调整? 
mediaxyz 23:45:56
我没有试过 
mediaxyz 23:46:07
按照ffmpeg的调用规则,好像不行 
Leon 23:46:32
按照你的说话,VBR设定如下几个值就可以了:
c->flags |= CODEC_FLAG_QSCALE;
c->rc_min_rate =min;
c->rc_max_rate = max; 
c->bit_rate = br; 
br是平均码率
是这样吗? 
mediaxyz 23:47:06
是的 
mediaxyz 23:47:51
也就是这样设置的码率会在Min,max之间波动 
mediaxyz 23:48:11
如果设置qscale,则波动范围是非常大的, 
mediaxyz 23:48:21
c->rc_min_rate =min;
c->rc_max_rate = max都控制不了 
Leon 23:48:27
明白了 
Leon 23:48:29
还有一个帧率的问题,在x264编码方式下,我设定了5帧,为什么不起作用?
AVRational time_base;
time_base.num = 1;
time_base.den = 5;
c->time_base= time_base; 
mediaxyz 23:49:05
你是实时,还是转码? 
Leon 23:48:55
实时 
mediaxyz 23:49:23
转码不行 
mediaxyz 23:49:27
实时可以控制 
mediaxyz 23:49:38
控制的方法就是控制图像捕获的帧率传入就行了 
mediaxyz 23:49:48
靠x264本身不行 
Leon 23:49:42
呵呵,明白了! 
Leon 23:50:04
我本想靠ffmpeg来控制的,就是不行! 
mediaxyz 23:51:12
帧率控制是说:播放是的帧率 
Leon 23:51:03
在ffmpeg中,time_base只是起到一个时间戳增量的作用,并不能控制帧率,对吧! 
mediaxyz 23:51:31
不管你选择5还是10,时间戳是按照播放设置的 
mediaxyz 23:52:11
播放的时候,读取这个按照5或者10计算的时间戳才设定播放时间区间,这个时候才其作用 
Leon 23:53:21
如果输入的流是25帧,而我设的确是5,会产生什么后果吗,我这儿的测试结果是没有什么影响? 
mediaxyz 23:53:37
不过ffmpeg的码率控制对x264不起作用 
mediaxyz 23:53:53
不会 
Leon 23:54:02
ffmpeg的码率控制对x264不起作用?按照前面的设定了也不能控制x264的码率? 
mediaxyz 23:54:30
如果是实时捕获的,则捕获程序会丢弃 
mediaxyz 23:54:42
这些情况我都测试过了 
mediaxyz 23:55:07
本想写个ffmpeg心得,实在没有时间 
Leon 23:55:10
如果是实时捕获的,则捕获程序会丢弃?如何理解? 
mediaxyz 23:56:09
捕获程序有一个缓存,如果到特定时间,还没有把缓存中的数据清空,则自动丢弃 
mediaxyz 23:56:23
directshow,vfw都是这样的 
Leon 23:56:16
我现在想通过实时采集的视频,用x[FS:PAGE]264编码,采用VBR,就是你前面说的几个参数设定,能起作用吗? 
mediaxyz 23:56:57
那你最好采用第二种方法 
Leon 23:57:01
就是:
c->flags |= CODEC_FLAG_QSCALE;
c->rc_min_rate =min;
c->rc_max_rate = max; 
c->bit_rate = br; 
mediaxyz 23:57:29
错了 
mediaxyz 23:57:32
是第一种 
mediaxyz 23:57:34
(2006-04-16 23:30:54) mediaxyz(17328860)
c->bit_rate = br;
c->rc_min_rate =br;
c->rc_max_rate = br; 
c->bit_rate_tolerance = br;
c->rc_buffer_size=br;
c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
c->rc_buffer_aggressivity= (float)1.0;
c->rc_initial_cplx= 0.5; 
Leon 23:57:29
why? 
mediaxyz 23:57:56
第一种波动太大 
mediaxyz 23:58:09
说糊涂了,不好意思 
mediaxyz 23:58:14
第二种波动太大 
Leon 23:59:20
可是波动太大也就其好处,当画面静止时,码流就很小,活动时,码流才上来,是这样的吗? 
mediaxyz 23:59:49
是 的 
me diaxyz 23:59:58
如果是网络上传输,这种情况就惨了 
Leon 00:00:12
我认为:网络上传输,这种情况应该更合适 
mediaxyz 00:00:32
“码流才上来”,上来的可能会非常大 
mediaxyz 00:00:52
是的,更合适,如果非常大,怎么办? 
Leon 00:01:24
非常大?不是通过c->rc_max_rate = max;可以控制其最高码率吗? 
mediaxyz 00:02:15
我刚才说,理论上是这样的,但ffmpeg实际没有实现 
mediaxyz 00:02:19
ffmpeg的缺点 
Leon 00:02:21
max就是我预计网络能承载的最大负荷。 
Leon 00:02:31
喔,然来如此! 
mediaxyz 00:03:02
ffmpeg中的h263,h263p比mpeg4要控制的好 
mediaxyz 00:03:07
x264更糟糕 
mediaxyz 00:04:39
睡觉了,改天再聊 
Leon 00:04:32
不过在同等码率下,x264的视频质量要比其它的都好,比较的细腻。但其编码的效率不高。 
mediaxyz 00:05:13
windows的x264已经非常不错了 
Leon 00:05:18
如果你不介意,我把今天的内容发到论坛上,也算是你的经验吧! 
mediaxyz 00:05:54
无所谓 
Leon 00:05:46
晚安!

得出的结论:

ffmpeg中CBR(固定码率控制)的设置:
c->bit_rate = br;
c->rc_min_rate =br;
c->rc_max_rate = br; 
c->bit_rate_tolerance = br;
c->rc_buffer_size=br;
c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
c->rc_buffer_aggressivity= (float)1.0;
c->rc_initial_cplx= 0.5; 
ffmpeg中VBR(可变率控制)的设置:
c->flags |= CODEC_FLAG_QSCALE;
c->rc_min_rate =min;
c->rc_max_rate = max; 
c->bit_rate = br;

经过实验,得出如下结论:

ffmpeg的CBR可以控制得非常好,与设定值br十分接近
ffmpeg的VBR控制得非常不好,最高码流max没有限制住
与mediaxyz的说话完全吻合。
感谢mediaxyz奉献如此宝贵的经验。

http://www.blogjava.net/sl2cj/articles/55193.html

http://hi.baidu.com/zhupan19851230/item/693481d9f18f3fe054347fa5

mediaxyz访谈录:ffmpeg的码率控制的更多相关文章

  1. FFMpeg的码率控制

    mediaxyz是一位研究ffmpeg有三年的高人了,这几天一直在折腾ffmpeg中的x264,就是不知道该如何控制码率,主要是参数太多,也不知道该如何设置,在google上search了一下,这方面 ...

  2. [转载] FFMpeg的码率控制

    mediaxyz是一位研究ffmpeg有三年的高人了,这几天一直在折腾ffmpeg中的x264,就是不知道该如何控制码率,主要是参数太多,也不知道该如何设置,在google上search了一下,这方面 ...

  3. ffmpeg码率控制

    一.VBR与CBR的含义和区别 VBR是动态码率.CBR是静态码率. VBR(Variable Bitrate)动态比特率.也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率, ...

  4. [转载]FFmpeg中使用libx264进行码率控制

    1.  X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQP > CRF. if ( bitrate )       ...

  5. (原)理解码率控制模式(x264,x265,vpx)

    理解码率控制模式(x264,x265,vpx) 原文链接:https://slhck.info/video/2017/03/01/rate-control.html 翻译:lihaiping1603@ ...

  6. 2016-06-06:X264码率控制

    H.264与x264 H264是一个视频压缩编码标准.https://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC X264实现H264视频压缩标准的开源项目.http ...

  7. h.264码率控制

    h.264的码流传输是基于目前有限的网络带宽来进行的,以目前的压缩效率来说,运动不算剧烈.细节不多的影像,在720p的情况下,1000kbps压缩损耗较少(psnr较大),能达到比较好的观赏效果,10 ...

  8. HEVC码率控制浅析——HM代码阅读之一

    HM的码率控制提案主要参考如下三篇:K0103,M0036,M0257.本文及后续文章将基于HM12.0进行讨论,且首先仅讨论K0103对应的代码,之后再陆续补充M0036,M0257对应的代码分析, ...

  9. 最近调试HEVC中码率控制, 发现HM里面一个重大bug

    最近调试HEVC中码率控制, 发现里面一个重大bug! 码率控制中有这么一个函数: Int TEncRCGOP::xEstGOPTargetBits( TEncRCSeq* encRCSeq, Int ...

随机推荐

  1. vcl.Forms等与VCL界面有关的单元不支持跨平台

    vcl.Forms等与VCL界面有关的单元不支持跨平台 midaslib也不支持

  2. GCD CoreData 简化CoreData操作(转)

    来自会员带睡帽的青蛙的分享: 短话长说,开始写这个小工具到现在有两个月了,虽然东西少,但是很精练,改了又改,期间有不少问题 在坛子里获得了不少帮助 谢谢各位大大. 就是两个文件一个类 CoreData ...

  3. 老毛桃winpe优盘启动系统个性修改全攻略

    PE优盘系统也有很多:大白菜.老毛桃.深度.通用PE工具箱.U大师.电脑店……这些PE优盘系统大多都会捆绑软件安装.更改主页等,一不小心,你就中招.虽然有些是可以自己去取消,但是启动画面还是带有各种L ...

  4. Solaris文件系统管理

    不同的操作系统使用不同类型的文件系统 1.文件(管理)系统:是用来对文件和目录进行管理.控制的数据结构的总称. Windows当中的文件系统: ntfs ,fat32 ,fat64 Solaris 当 ...

  5. python(17)- 迭代器和生成器及应用

    什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象 ...

  6. 7.2 HAVING子句

    7.2 HAVING子句正在更新内容.请稍后

  7. Tomcat appears to still be running with PID 19564. Start aborted

    产生原因:tomcat 异常关闭, 或强行终止导致(如断电等....) 如你所见 .  tomcat 在linux  关, 关不了. 开开不了. 疯狂百度一个小时以后,大致产生问题的原因是,LINUX ...

  8. 模式匹配之sift--- sift图像特征提取与匹配算法代码

    sift,The Scale Invariant Feature Transform ,尺度不变特征变换,是检测图像中具有唯一性.对图像平移.旋转.缩放.甚至仿射变换(如从不同角度拍摄图片)保持不变性 ...

  9. 程序猿的量化交易之路(27)--Cointrader之PriceData价格数据(14)

    转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ PriceData:价格数据.价格数据 ...

  10. FreeCMS怎么动态訪问模板?

    原文地址:http://javaz.cn/site/javaz/site_study/info/2015/31166.html​ 项目地址:http://www.freeteam.cn/ FreeCM ...