蜗牛的壳

蜗牛的壳

我行依我素 | 苦苦咸咸就是我 | Snailium的个人网站

浏览模式: 标准 | 列表
2009年08月的文章

MBAFF 视频处理


最近在压制 BBC 出品的纪录片的时候,遇到了 MBAFF 格式的视频。doom9 上查了一下,这种被标注为“1080i”的视频,其实既不是逐行也不是隔行。

大小: 52.72 K 尺寸: 400 x 224 浏览: 6 次点击打开新窗口浏览全图

通常,我们所说的“i”(interlaced,隔行扫描)和“p”(progressive,逐行扫描)都是针对“帧”(frame)来说的。将一帧分为高场(top field)和低场(bottom field),统一编码则为逐行扫描,分开编码即是隔行扫描。

但是,MBAFF(Macro-block Adaptive Field Frame)是按照大块来分场。也就是说,在一帧当中,有的大块是逐行,有的大块是隔行。这样一来,用普通的反交错(deinterlace)的话,碰到隔行块还好说,如果遇到逐行块,结果就是变模糊。

在网上搜了很久,终于在 doom9 上找到某达人的解决方法(姑且暂称为“插值法”):

  1. Interp = nnedi2(field=0)
  2. em = TMM(order=0,field=0)
  3. TDeint(order=0,field=0,type=1,edeint=Interp,emask=em)

以下为源片、TomsMoComp 和“插值法”的对比(依次从上到下)。片源为 Bluray 版《BBC: Wild China》。


00:00:12.251

大小: 227.79 K 尺寸: 400 x 225 浏览: 7 次点击打开新窗口浏览全图

大小: 206.95 K 尺寸: 400 x 225 浏览: 4 次点击打开新窗口浏览全图

大小: 214.56 K 尺寸: 400 x 225 浏览: 2 次点击打开新窗口浏览全图

由于这一帧基本上全部为隔行,TomsMoComp 和“插值法”的效果不相上下。但是 TomsMoComp 的速度比“插值法”快很多。


00:49:53.377

大小: 246.32 K 尺寸: 400 x 225 浏览: 3 次点击打开新窗口浏览全图

大小: 227.14 K 尺寸: 400 x 225 浏览: 7 次点击打开新窗口浏览全图

大小: 232.75 K 尺寸: 400 x 225 浏览: 6 次点击打开新窗口浏览全图

这一帧比较复杂。蟒蛇部分为隔行,其他部分都是逐行。可以看出,TomsMoComp 虽然将蟒蛇部分成功反交错,同时也将树枝部分变得模糊。但是“插值法”很出色,不仅反交错了蟒蛇部分,同时也将树枝部分的细节保留得很好。


通过以上比较,暂时可以得出结论,对于 MBAFF 片源,“插值法”是最佳选择。


参考文章:
1. How to deinterlace MBAFF source?

关于 AVC High@L5.1 降级为 L4.1 的注意事项


之前一直在研究 Xbox360 能播放的高清视频,也大概摸索了一下 Xbox360 能播放的 H.264 视频制作方法。但是这几天在处理 CHD 制作的日本樱花的时候,制作完的 MP4 文件在 Xbox360 上播放死机。

仔细在网上搜索了一下,问题出在视频降级环节上。

用 h264info 更改 Profile Level 实际上用的是欺骗法(将第 7 个字节由 0x33 改成 0x29)。这种方法只对 Level 4.1 兼容视频有效。

何谓 Level 4.1 兼容视频?这要从 Profile Level 说起。具体的 Profile Level 规则我没有看(也没时间去研究),看 Doom9 上各位达人的讨论,问题出在缓冲区上。Level 5.1 要求的解码器缓冲区要大于 Level 4.1,所以如果没有足够大的缓冲区,解码就会出错。在 Xbox360 上的表现就是死机。

那何谓 Level 4.1 兼容视频呢?简单来说,有些视频虽然标注为 Level 5.1,但是解码时缓冲区的要求很小,甚至小于 Level 4.1 的规定。这样一来,用 Level 4.1 的解码器完全可以解码这个“Level 5.1”视频。这样的视频就被称之为“Level 4.1 兼容(Level 4.1 compliant)”。

在大致搞明白原理之后,下一步就是研究对策。既然有“Level 4.1 兼容”一说,也就证明有些视频还是可以无需重压直接降级的。要确定视频是否“Level 4.1 兼容”,比较方便的方法是使用 mkv2vob

首先,在 Configuration 标签中,把 Video Transcoding 选成 Never。这样可以避免自动重压。

大小: 62.25 K 尺寸: 400 x 387 浏览: 4 次点击打开新窗口浏览全图

然后在 Add File 标签下,选择 MKV 文件和输出目录,再点 Add File,软件就会自动检查视频。

大小: 48.28 K 尺寸: 400 x 387 浏览: 1 次点击打开新窗口浏览全图

如果出现“Transcoding Required: Not L4.1 Compliant”,就说明视频不能被 Level 4.1 解码器正确解码,需要重新压制。

另外,如果源片的音频是 AAC 5.1 的话,还涉及到音轨映射问题。在这里就不详细叙述了,具体参见“参考资料 2”,


参考资料:
1. Doom9.org: High Profile 5.1 -> 4.1
2. Flexion.org: Converting MKV

wmvMerge.pl - Phase 0


合并两段 WMV 文件,理论上来讲不是什么麻烦的事,在网上也能找到很多相关软件。可是,网上的软件或多或少都有些问题,比如说画面抖动、音画不同步等等。就连收费的商业软件也不例外。无奈之下,只有自己写一个合并工具。

用什么语言比较好呢?学软件的各位一定想到了 C++ 和 Java。

No!我不要用连 unsigned integer 都没有的 Java!

想来想去,最简单的还是 Perl。不用安装任何编程/调试工具,反正我的 WD MyBook World Edition 里面带着 Perl 5.8.8 程序,直接就用它了!

从头开始写一个脚本还真费事。昨天晚上花了好几个小时才完成 argument parsing、PrintHelp() 和 verbose functions。今天写了一点点 Header Object parsing。

最麻烦的是 ASF 容器各个字段都是用 little endian in byte order with 32-bit boundary(32 位为一组、以字节为单元的 little endian),其中的 128 位 GUID 需要分 4 组进行逆序运算……。用 Perl 搞一个 endian 转换还真是麻烦。

慢慢来吧,也不知道什么时候才能到 Phase 1。没准又半途而废了。


参考阅读:Advanced Systems Format (ASF) Specification

Xbox 360 夏季更新 硬盘安装节省空间


终于被抽中体验预览版夏季更新了。看到网上说,这次夏季更新将会让硬盘安装节省空间,于是就试了一下。结果果然如此。见下表。

游戏 08秋季更新 09夏季更新
NFS: ProStreet 5.5 GB 5.1 GB
Overlord 3.5 GB 2.4 GB
Overlord 2 3.4 GB 3.2 GB
The Orange Box 4.7 GB 3.9 GB
Sacred 2 6.5 GB 6.3 GB
Raiden Fighters Aces 3.4 GB 485 MB
GTA IV 6.8 GB 6.5 GB
DOA 4 6.8 GB 6.7 GB
Medal of Honour: Airborne 6.0 GB 4.7 GB
DDR Universe 3.4 GB 3.0 GB
DDR Universe 2 3.4 GB 3.2 GB
DDR Universe 3 6.1 GB 3.6 GB
Ace Combat 6 6.4 GB 5.1 GB
BF: Bad Company 5.9 GB 4.9 GB
Fable II 6.8 GB 6.6 GB





« 2009年08月 »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

标签

用户


链接


归档


信息

  • 分类数量: 13
  • 文章数量: 208
  • 评论数量: 78
  • 标签数量: 387
  • 附件数量: 318
  • 引用数量: 2
  • 注册用户: 9
  • 今日访问: 493
  • 总访问量: 495559
  • 程序版本: 1.6