H264的2:3 pulldown的实现
由 hubdog 于 星期二, 2009-06-09 16:13 发表
关于pulldown的解释,参见http://en.wikipedia.org/wiki/Telecine#2:3_pulldown
简单的说,就是将电影的流媒体(24fps)转换为NTSC(30fps)或者PAL上可以正常播放的流媒体。
实现的方式就是播放器将4帧图像在播放时扩展为5帧图像。对于编码器来说,需要在编码时写入指定的SEI扩展信息。pulldown实现相关的SEI信息参考H264标准的D.2.1Buffering period SEI message semantics中Pic_Struct这一部分。
常见的2:3 pulldown的实现就是
帧号 0 1 2 3 4 5 6 .. PIC_STRUCT 3 5 4 6 3 ....... 场结构 TB TBT BT BTB TB .......
注意pulldown只对帧模式有效,因为标准中场模式情况下Pic_Struct只能是1(顶场)和2(底场)
除了Pic_Struct之外,相关的
cpb_removal_delay(dts) , dpb_output_delay(pts)
可能也需要调整,某些解码器可以根据上面的信息来调整播放时间(FFMPEG也只是提供了部分支持),好像一些商业软件(比如Sony的一些DVD制作工具)可以更好的利用dts,pts信息。
比如对于 IDR P P IDR PP....这样的帧结构
没有Pulldown时,dts应该是编码顺序,0, 2, 4, 6 ...
有pulldown时,dts需要调整为 0, 3, 5, 8。