♫雪飘轻音部♫
雪飘工作室 FLsnow.net
∮吉他1∮  ♪平沢唯♪  后期、特效、压制、海报 蛋疼蛇
∮吉他2∮  ♪中野梓♪  片源          猫猫猫受受受
∮贝斯∮   ♪秋山澪♪  TV计时、海报、蛋疼  妹抖冥
∮键盘∮   ♪琴吹紬♪  翻译          岸尾蓮
∮架子鼓∮  ♪田井中律♪ 校对          小白白
∮吉他补∮  ♪平沢憂♪  BD计时        小萱萱


版本的相关说明:

1080p版本采用Matroska封装;AVC/H.264视频编码;三轨音频均为FLAC音频编码,分别为正片音轨、声优评论音轨、制作人员评论音轨;两轨字幕分别为ass格式的简体中文文本字幕和VobSub格式的日语图形字幕。日语图形字幕转自BD原盘中剥取的PGS字幕(因为目前除MediaPlayer ClassicHomecinema、PotPlayer等少数播放器外的绝大多数播放器和所有字幕插件均不支持PGS字幕),分辨率1920x1080。1080p版本不能保证播放机等设备的兼容性,虽然在我自己的测试设备上没问题。

720p版本采用MP4封装,AVC/H.264视频编码,仅包含AAC编码的正片音轨。字幕外挂,简体中文ass和日语sub/idx。日语sub/idx转自BD原盘中剥取的PGS字幕(因为目前除Media Player ClassicHomecinema、PotPlayer等少数播放器外的绝大多数播放器和所有字幕插件均不支持PGS字幕),分辨率1280x720。720p制作中考虑了硬件的兼容性,兼容PS3、Xbox 360、BD播放机等设备(字幕当然不兼容)。

本次720p发布补上了上次漏掉的Jacket、Menu,并顺手修正了上次特典的一个字幕错误(1080p无此错误)。

播放的相关说明:

正确渲染字幕,需要使用VSFilter 2.39(2008-07-28 SVN revision 72)以上版本或者LibASS 0.9.6以上版本!
最新版本的MPlayer、VideoLan Client、Media Player Classic和Media Player Classic Homecinema均包含能正确渲染字幕的字幕组件。

Windows用户推荐Media Player Classic Homecinema。你可以在 http://www.xvidvideo.ru/content/view/703/1 下载到。
Linux用户、Unix用户和Mac OS X用户推荐VideoLan Client。http://www.videolan.org/vlc/

那么又到了
妇联评论
本期我决定全文转载一篇译文,个中缘由还请大家自行揣测。
[align=center]寻找最适合动漫的视频编码
[/align]
作者:Dark Shikari(作者系x264主要开发者之一)
译者:ssnake
关键词:H.264、结构相似度(SSIM)、评测、码率控制、x264
原标题为Encoding animation(编码动漫),原文链接:http://x264dev.multimedia.cx/?p=102

而今各类编码器的横评早已烂大街了,但我却几乎从未看到过关于动画片源的测评。与(真人)电影相比,动画素材有着完全不一样的特性,对于视频编码来说是一次全新的挑战。

首先,我们讨论一下为什么这些(动漫)视频容易压缩。动漫主要由静态画面组成:人物置于完全静态的背景上。而人物本身也几乎是静态的:现代动画往往有着一个远低于真实视频的帧速率(FPS)。此外,人物往往只是站在那里动动嘴巴,这又大大降低了复杂度。最后,动画往往非常干净,没有任何胶片颗粒。这一切,让动画压缩看上去是如此轻松。

但是,不要让上面这些理由欺骗了你——另一方面,动漫其实很难被压缩。首先,动漫中大量的码流被用于锐利的物体边缘。这些边缘信息频域转换后会产生大量的高频频谱系数,编码代价颇高。事实上,简而言之,不论是基于离散余弦转换方式(DCT-based)(如H.264、MPEG-4、MPEG-2、Theora等等)还是基于小波变换(Wavelet-based)(如Dirac、Snow等等),现有的视频格式都完全不适于编码这些动漫固有的边缘信息。而据我所知,也没有人提出能明显改善的办法(编者按:其实编码就像地图测绘,不怕一座高耸的珠穆朗玛,就怕连绵不绝的小山小丘)。或许方向小波(Directional wavelet)可以达到目的。

除了变换的难题外,就编码器的角度来看也有着重重问题。在动画素材中,移动鲜见平滑:因为动漫往往以一个(相对于真实视频来说)非常低的帧速率制作,一个物体可能在静躁之间游移,这让时间轴预测的动态搜寻难以为继。当这个物体突然向右跳了20个像素时,常规方法必然很难找到这个物体的去向。

还有视觉效果的问题:那些边缘是如此耗费码流,因而编码器会倾向于给画面其他部分(比如背景)很少的码流。这意味着我们反而经常需要设置很高的码率以防背景崩坏。

此外,动漫对于码率控制来说也是个麻烦事:对于动画片源,常规的预测方法往往无能为力;因为一帧时而耗费颇多,时而所需寥寥——尽管它们看上去可能是一样复杂。对于动画输入,即使是x264的VBV(视频缓存检验器)在一次编码(1-pass)模式下也难以给出一个良好结果;因此,也无怪许多编码器对于此类素材都束手无策。

如此总总,让动画编码好比“王母娘娘编笸箩”,看着容易做着难。

于是,让我们来看看这些编码器们的表现吧。由于几乎无法找到一段合适的免费动画资源,我从我手头唯一合适的动漫DVD——东方二次同人《梦想夏乡》——中选出5000帧进行测试。这是一个有着相对较少动作的非常干净的素材——典型的动画。

作为测试标准,我选择SSIM(结构相似度)作为度量衡——鉴于主观评价无异于一场噩梦,而且从不会得出有说服力的结论。我之所以选择SSIM而非PSNR(信号-噪音功率比,简称信噪比),不仅仅因为SSIM是一个更加科学的度量衡,而且其结果更加适合动漫。如前所述,动漫中大多数码流被用于源自物体边缘的黑线,这些边缘的均方误差让其他失真相形见绌。如此,为了让信噪比最优(PSNR-optimal),就算背景一塌糊涂,也要克扣码率给线条,让线条好看哪怕只是一点点——这显然不能获得良好的视觉效果。尽管SSIM也不尽完美,但从视觉效果的角度说它显然是比较好的选择。我使用MSU Video Quality Tool来计算SSIM。

为比较方便,我使用了公式1/(1-SSIM)以得出一个可比较的数字:0.98的SSIM比0.96的SSIM好上一倍,0.96的SSIM又比0.92的SSIM好上一倍;因此0.98的SSIM比0.92的SSIM好上三倍。注意,尽管这种比较描述一种编码器比另一种“好上三倍”,但这并不意味着后者需要比前者多三倍的码率来获得同样的质量。

此外,我尝试让各个编码器的输出文件大小统一——因为并不是所有编码器都输出大小精确的文件(尽管我已经做了许多次重编码来试图让它们尽量接近)。这是一个不讨论速度的测试,我使用了每个编码器可用的最慢的参数。我没有过多调整编码器的片源设置,ffmpeg的设置来自我所有的“质量最优的ffmpeg设置”文件,所以我并不知道是否有更优的设置。

对于所有编码器,我使用250kbps的视频码率和(我所能设置的最接近于)250帧的最大关键帧间隔。少数不知名的编码器(比如Bink)不允许设置最大关键帧间隔。下面是我所用到的编码器、参数以及它们各自的视频格式。

x264 (r1206)
视频格式:H.264/AVC High Profile
参数:--preset placebo --tune ssim --rc-lookahead 250,二次编码

我测试了五种不同的编码设置以比较x264在快一些的模式下有多少质量损失,以及--tune ssim预设相比--tune psnr有多少SSIM提升。

x264 Baseline
视频格式:H.264/AVC Baseline Profile
参数:--preset placebo --tune ssim --rc-lookahead 250 --profile baseline,二次编码

x264 Ultrafast
视频格式:H.264/AVC Baseline Profile
参数:--preset ultrafast --tune ssim,二次编码

x264 Veryfast
视频格式:H.264/AVC High Profile
参数:--preset veryfast --tune ssim,二次编码

x264 Medium
视频格式:H.264/AVC High Profile
参数:--preset medium --tune ssim,二次编码

x264 PSNR
视频格式:H.264/AVC High Profile
参数:--preset placebo --tune psnr --rc-lookahead 250 --profile baseline,二次编码

WMV (Expression Encoder 3)
视频格式:VC-1 Advanced Profile
参数:“best”预设

Xvid (1.2.1)
视频格式:MPEG-4 Part 2 ASP
参数:全选,包括bframes、qpel、GMC

Thusnelda (August 7th ffmpeg2theora nightly)
视频格式:Theora
参数:二次编码(没有别的质量参数了)

Quicktime (7.6.2)
视频格式:H.264/AVC Main Profile
参数:二次编码(没有别的质量参数了)

ffmpeg mpeg2
视频格式:MPEG-2 video
参数:-flags qpel+mv0+cbp+aic -dia_size 1040 -g 250 -bf 8 -b_strategy 2-cmp sad -subcmp rd -mbd 2 -precmp sad -last_pred 4 -subq 8-bidir_refine 4 -trellis 1 -qns 3,二次编码.

ffmpeg mpeg4
视频格式:MPEG-4 Part 2 ASP
参数:-flags mv4+qpel+mv0+cbp+aic -dia_size 1040 -g 250 -bf 8 -b_strategy2 -cmp sad -subcmp rd -mbd 2 -precmp sad -last_pred 4 -subq 8-bidir_refine 4 -trellis 1 -qns 3,二次编码.

ffmpeg flv1
视频格式:Sorenson Spark H.263 (FLV1)
参数:-flags +mv4+mv0+cbp+aic -dia_size 1040 -g 250 -cmp sad -subcmp rd-mbd 2 -precmp sad -last_pred 4 -subq 8 -trellis 1 -qns 3,二次编码.

On2 VP7
视频格式:VP7
参数:二次编码以及“best”预设

Ateme (1.11)
视频格式:H.264/AVC High Profile
参数:“Full” preset with “macroblock-level” psy optimizations.
注意:这并不是它的最新版本2.0,因为我不知道有谁能弄到它。所以请权当这是个一般的H.264编码器,并非Ateme的最佳表现。

Real Producer (10)
视频格式:RV40 (similar to H.264/AVC Main without CABAC)
参数:“High”质量,二次编码.

Bink Video
视频格式:Bink Video
参数:64-frame lookahead(没有别的质量参数了)

Elecard Converter Studio (3.1)
视频格式:H.264/AVC High Profile
参数:全部最高;我测试了complexity mask以期能改善SSIM,但结果并不理想,故而未用

Badaboom (1.2.1)
视频格式:H.264/AVC Main Profile
参数:它没什么设置,连二次编码都没有。

Indeo 5 (5.1)
视频格式:Indeo 5
参数:它没什么设置。

ffmpeg Snow
视频格式:Snow
参数:(mencoder) vcodec=snow:vstrict=-2:vbitrate=250:pred=0:mbd=2:cmp=12:
subcmp=12:mbcmp=12:qpel:vme=8:refs=8:keyint=250 (二次编码)

ffmpeg SVQ1
视频格式:SVQ1(译者注:Sorenson Video 1,SVQ1意为Sorenson Vector Quantizer #1)
参数:-qscale 23.5 -g 250 -cmp satd -subcmp satd -mbcmp satd -mbd rd -dia 4 -last_pred 2
注意:这仅作为最佳预变换时代视频格式——矢量量化(VectorQuantization)编码器的范例。我使用ffmpeg是因为因为Apple版本很糟糕,而使用固定质量模式则是因为ffmpeg对于SVQ1不提供码率模式(我使用了牛顿法以在固定质量模式中求得一个匹配的码率)。

我本打算在测试中包括Dirac,但我找不到最大关键帧间隔的设置,而用它默认很低的最大关键帧间隔(40)与其他编码器比较是非常不公平的。下面是测试结果:
Link

图例:
蓝色:x264
红色:非x264的H.264编码器
绿色:ffmpeg的编码器
黄色:不属于以上各类的开源编码器
紫色:不属于以上各类的私有编码器

有着太多的惊奇,且听我娓娓道来。

1. x264 Baseline Profile超过了一切非x264编码器
我没有料到会是这样。哪怕相比High Profile有着55%的差距,但x264 Baseline相比Elecard依然稍占上风。
2. 哪怕是使用优化PSNR的参数,x264依然把其他编码器打得屁滚尿流(beats the hell out of everything)
我曾预计AQ是x264获胜的一个重大因素,因为这是一个SSIM测试——但现在我们并没使用AQ(译者注:--tune psnr预设(即优化PSNR的参数)是关闭AQ的)。
3. ffmpeg的编码器惊人的出色
用了超级无敌慢无下限的极限设置,ffmpeg表现得非常好:它的MPEG-4编码击败了WMV,它的MPEG-2则力克Theora。就连FLV1也几乎与Badaboom打成平手。
4. 优劣H.264编码器之间相差达4倍之多
当然,也有很多事情一点也不奇怪:比如Apple和Badaboom是极其糟糕的H.264解决方案。我们基本都知道这个了。
5. WMV表现得糟透了
因为不允许在区块内使用除了8×8之外的变换(译者注:WMV自身的限制),WMV在这个测试中被严重削弱了。但这并不足以说明为什么ffmpeg的MPEG-4足以击败它。[/list]

下面是一些须知事项:
1. 如前所述,这仅仅是一个针对动漫的测试;这个测试先天偏向于能够使用较小变换尺寸的视频格式(比如H.264)。所以这些结果对于非动画素材来说了无意义。而且,一些编码器是为高速而设计的,与那些非常慢的编码器同台竞技并不是那么公平。
2. 我了解很多种因解码器不一致而得出相对较低SSIM结果的可能,我相信我解决了一切这类问题,但我并不敢保证。
3. 我所知唯一能让解码器完全统一的方法是使用ffmpeg的Real和WMV解码器,但这或许并不完全地精确,所以这些结果(译者注:Real和WMV)可能稍有偏差。
4. (据一位Theora的开发者透露)对于这个片段,Theora显然有更好的码率控制手段。所以在将来的测试中,Theora或许会有相当的进步。
5. Indeo 5.1丢弃了部分帧,这是它的SSIM如此低的原因。当然,如果这个编码器确实耗尽了所有码流,以至不得不丢弃部分帧的话,我们也毫无办法。

综上所述,这张图表突出展现了优秀方案的重要性:一个糟糕的H.264解决方案(Apple)连上一代(MPEG-4 ASP)的优秀解决方案(ffmpeg)都不如。

作为参考,几乎所有的(或许我遗漏了一两个)测试片段都可以在这里找到。