首先要明确的就是GoP的概念,这是MPEG视频编码基本中的基本
http://zh.wikipedia.org/wiki/%E5%9C%96%E5%83%8F%E7%BE%A4%E7%B5%84ref是最大允许的参考帧数目
AVC相对之前的视频编码一个很重要的改进就是加入了多重参考帧。相比之下传统的视频编码中P帧只能参考1个帧,B帧只能参考2个帧。在某些情况下甚至可以参考到前一个GoP中的帧(但事实上x264几乎不会输出非IDR帧的I帧,除非场景变换的帧数小于min-keyint)。
加大ref可以在某种程度上提升质量,但过多的参考帧意义并不大,相反会严重影响硬件解码器的解码兼容性,所以AVC的level对参考帧数目进行了限制。对high4.1来说这个限制(DBP)为8388608 / (Height X Width) = nREF。
据说以前的x264在打开--b-pyramid的时候ref要-1才符合DPB的限制,而现在似乎修复了这个问题。我是N卡,无从测试。
个人认为没必要为一点压缩率牺牲兼容性,可以在x264的命令行的最后加入--level 3.1(SD)/4.1(HD)来限制ref,但是x264对level的计算似乎并不是那么完美。
需要注意的是如果你把--level写在--ref的前面话,--ref会把--level所限制的ref设定覆盖。
至于--bframes,这个参数会影响x264是否使用b帧和连续使用B帧的数目。由于B帧的压缩率很高,几乎没人会设成0。当--b-adapt 1的时候,--bframes从1-16似乎对速度没多少影响。当--b-adapt 2的时候,--bframes加大会极大的影响速度,一般来说3-6比较合适,再多的话基本只是徒劳降低速度。除非你很纠结于速度,否则还是用b-adapt 2比较好。
如果在first pass的时候使用了b-adapt 2,2nd pass的时候可以用b-adapt 0来提升速度。
以上内容全部基于我自己的理解,经验有限,错误之处肯定不少,望指正