Anamorphic Video Coding, SAR, DAR, ASS
唔,头上那个是标题,不是关键字…
这两天帮组里做一个中古OVA的字幕,手上的源是Anamorphic Coding之后的mp4,外挂字幕后发现字体会被挤压,看下图:

这是个头痛我不短时间的问题了,趁着解决这个问题的机会,把标题上列的那几个东西深入的再学习了一遍。
1. Anamorphic Video
说Anamorphic,我们就要看下视频文件的相关知识了。现有的比较先进的视频容器格式,比如mp4和mkv,都支持一个叫做Aspect Ratio Flag的东西,这个东西相当于Head Information,与常见的其它Head Information一起写入文件的头部。Aspect Ratio Flag掌管着视频回放时告诉播放器的高宽比,通过这个Flag,视频实际保存的高宽比可以与回放时的不一致。对这种不一致的视频,我们统一称为Anamorphic Video。
Anamorphic Video并非上面这类容器的首创,在DVD格式中,Anamorphic Video就经常出现,比如下图就是OVA 星空キセキ在DGIndex中反馈的DVD信息:

注意Aspect Ratio写着16:9(AR=1.778),但Resolution栏中的分辨率确是720×480(AR=1.5)。这是一个典型的Anamorphic Video的DVD影片。
选择Anamorphic Video对于DVD发行行业来说是有其原因的,这个就涉及到电影拍摄时母带的录制问题了。大家都知道,在DVD标准发布的那个年代,宽屏显示器简直是一个天方夜谭,因此标准中对DVD-Video格式AR的制定只考虑了普通高宽比一个选项,而那时候的DVD电影发布,毫无疑问的都是标准Aspect Ratio的。时过境迁,到了2006年前后,宽屏进入家庭,普通AR的DVD电影显然不能满足宽屏显示器使用者的视觉享受,重新洗牌制定新的标准又非一朝一夕之事,所以DVD Forum发布了一个amendment,提出了Anamorphic Video的概念,在保证DVD标准不变的前提上,让宽屏电影能存储在普通高宽比的DVD格式中。可以说,现在大部分DVD影片,都使用了Anamorphic Video的格式。
对于Ripper的我们来说,对于源的变化只能被动接受和适应,所以才出现了支持Anamorphic Video的容器格式。
而对于Ripper来说,Anamorphic的出现和支持Anamorphic容器的出现也产生了另一个关于制作方法的大讨论,简而言之,就是:Anamorphic or Not?
一般DVDRIP制作的前期源准备过程中,最重要的两个议题是Resize和Crop,其实大家都应该明白,这两个步骤是会损失片源的部分信息的,而Resize和Crop的本身也会带来AE错误,所以Resize和Crop并不是100%恢复片源的方法。
Anamorphic Video的出现,在这个问题上给了我们另一个思路:制作是不Resize,保持片源存储的AR,再压制得到生肉最后封装进入容器格式时指定播放Aspect Ratio。显而易见,这个思路与Anamorphic的DVD回放时的思路是一致的,且player使用的renderer的resize效果往往比AVS中内置的Lancozresize等滤镜质量要好,因此这种方法等到了不少人的拥护。但这个思路也并非十全十美,DVD四周常见的卷边、黑边、白边、回纹边是这个思路最大的死穴,如果要把这些去掉,必须Crop,Crop就会破坏视频存储的AR,从而导致最终回放的不正确。
这种思路的另一个威胁来自播放器,很多播放器,准确地说是播放器中内置的splitter不能正确识别容器Head Information的AR Flag,从而导致播放AR错误,Apple的QuickTime曾就长时间不能正确识别mp4容器中的这个Flag。
但无论争论是否继续,对Anamorphic Video Coding,ripper普遍持支持的看法。
2. SAR/DAR
想必大家都知道AR,不知道的也都知道16:9是宽屏,4:3是普屏。但知道AR还有很多个分类的人或许就不多了,SAR全程是Sample Aspect Ratio,也称Pixel Aspect Ratio,它指的是视频中每个像素点的高宽比,显然这和分辨率对应的AR并非一个概念,SAR也是Anamorphic的关键判据。SAR的产生其实与3D与2D的映射模型有关,在这就不多做介绍了。
DAR中的D指的是Display,也就是最终回放时视频的AR值(end ratio)。
不难看出,SAR/DAR/AR之间有如下关系:
DAR=Video AR * SAR(or PAR)
3. 问题的根源
回到最上面那个字体的问题,现在我们知道它的根源来自于VSFilter没有考虑视频源因Anamorphic产生的SAR。从Graphedit中我们知道VSFilter在Splitter之后Directshow输出之前工作,这样回放视频时,最后播放器根据AR Flag做缩放时会将字体也按DAR改变,因此就让原本正确高宽比的字体变肥或者变苗条了。
在不知道DAR的场合,我们可以根据DAR和Storage AR反过来推算下DAR,根据kmplayer返回的结果

值得注意的是kmplayer用SAR表示Storage而并非Sample,我们称它为AR,根据上面给出的公式,
DAR=1.74=SAR * AR(1.91), 得SAR=0.91
下面的问题就是如何将这个0.91反作用到字体上,于是我寻找了ASS字幕中的相关参数。
4. ASS
ASS,也就是style v4+新增了几个style参数,其中有两个称为scalex和scaley的参数,ASS文档中是这么介绍这两个参数的
Field 9.3: ScaleX. Modifies the width of the font. [percent]
Field 9.4: ScaleY. Modifies the height of the font. [percent]
bingo! 这就是我要的东西啊。根据上面的分析,我们将得到的SAR取倒数(reciprocal),也就是ScaleX=100, ScaleY=91, 写入需要外挂的ASS文件,重新回放,字体恢复,大功告成。

crop的作用除了剪除黑边以外,也是rip出AE=0或者保持AE低值的必要步骤。
Anamorphic的做法只指定PAR,但是不适当地crop的话,AE不会为0,这个是DVD回放设备和软件一直存在的问题。
我觉得,Anamorphic容器的出现,只是作为resize的一个替代解决方案而已。crop仍然不可缺。
最近确实看到有些组做dvd做成720*480,或者704*480.
但是没看过实物。应该是前者直接Anamorphic了,后者先crop再Anamorphic。
[WORDPRESS HASHCASH] The poster sent us ‘0 which is not a hashcash value.
[回复]
admin 回复:
四月 3rd, 2009 at 2:19 上午
@cunhan, crop和addboarder在rip中都有为了AE->0的作用
[回复]
oyear~这次做manimani,下了1440*1080的肉来压,要用到这篇文的招数~
[回复]