最近在压制 BBC 出品的纪录片的时候,遇到了 MBAFF 格式的视频。doom9 上查了一下,这种被标注为“1080i”的视频,其实既不是逐行也不是隔行。
通常,我们所说的“i”(interlaced,隔行扫描)和“p”(progressive,逐行扫描)都是针对“帧”(frame)来说的。将一帧分为高场(top field)和低场(bottom field),统一编码则为逐行扫描,分开编码即是隔行扫描。
但是,MBAFF(Macro-block Adaptive Field Frame)是按照大块来分场。也就是说,在一帧当中,有的大块是逐行,有的大块是隔行。这样一来,用普通的反交错(deinterlace)的话,碰到隔行块还好说,如果遇到逐行块,结果就是变模糊。
在网上搜了很久,终于在 doom9 上找到某达人的解决方法(姑且暂称为“插值法”):
- Interp = nnedi2(field=0)
- em = TMM(order=0,field=0)
- TDeint(order=0,field=0,type=1,edeint=Interp,emask=em)
以下为源片、TomsMoComp 和“插值法”的对比(依次从上到下)。片源为 Bluray 版《BBC: Wild China》。
00:00:12.251
由于这一帧基本上全部为隔行,TomsMoComp 和“插值法”的效果不相上下。但是 TomsMoComp 的速度比“插值法”快很多。
00:49:53.377
这一帧比较复杂。蟒蛇部分为隔行,其他部分都是逐行。可以看出,TomsMoComp 虽然将蟒蛇部分成功反交错,同时也将树枝部分变得模糊。但是“插值法”很出色,不仅反交错了蟒蛇部分,同时也将树枝部分的细节保留得很好。
通过以上比较,暂时可以得出结论,对于 MBAFF 片源,“插值法”是最佳选择。
参考文章:
1. How to deinterlace MBAFF source?