『漫游』酷论坛>『影音数码技术学习交流』>[测试]TMPGEnc之强大而 ..
[测试]TMPGEnc之强大而混乱且不实用的60FPS(修正版)
dizyh@2006-03-31 22:55
非常感谢adamhj及其他网友对本文几处基础概念的指正,所谓“失之毫厘,差之千里”恐怕就是指这个例子了。又好多原因,冒言春节后准备V2却拖到了现在,实在是…:o
正文开始:60FPS(以下除非说明是场速率,其余均指帧速率)说起来复杂,做起来也许麻烦,用起来也不怎么实用。不过,技术总是为创意而服务的,所以,必要的时候还是需要知道这东西是个啥。下面进行下测试,你会发现60FPS不过如此。
制作60FPS的标准定义是:在DVD→DVDRip的时候,把一帧拆成奇偶两场,然后把场补成帧,于是我们就可以获得60FPS。(其强大在拆,其混乱在补)
一、3:2 pulldown的两种形式:“Top field first”型和“Bottom field first”型
1、到底什么是“Top field first”型?在3:2 pulldown时“Top field first”方式的话会这样做胶卷过带:
A│B│C│D│ (24FPS一个最小片段——4帧)
Odd Field,也叫Top Field:奇数场
Even Field,也叫Bottom Field:偶数场
首先拆成场:Ao│Ae│Ao│Be Bo│Ce│Co│Ce│Do│De│(注意看,A被拆成了三份场,C也被拆成了三份,B、D被拆成了二场,形状如“3 2 3 2”,这个就是3:2pull-down的名称由来。并且是以Ao(奇数场)优先。
把Ao│Ae│Ao│Be Bo│Ce│Co│Ce│Do│De│写成帧的形式:A1表示奇数场,A2表示偶数场:
A1│A1│B1│C1│D1│
A2│B2│C2│C2│D2│ <-- 这个就是“Top field first”型的具体结构
2、在3:2 pulldown时“Bottom field first”方式的话会这样做胶卷过带:“Bottom field first”型:
首先拆成场: Ae│Ao│Ae│Bo│Be│Co│Ce│Co│De│Do│(注意看,A被拆成了三份场,C也被拆成了三份,B、D被拆成了二场,形状如“3 2 3 2”,并且是以Ae(偶数场)优先。
把Ae│Ao│Ae│Bo│Be│Co│Ce│Co│De│Do│写成帧的形式:
A1│B1│C1│C1│D1│
A2│A2│B2│C2│D2│ <-- 这个就是“Bottom field first”型的具体结构
二、TMPGEnc中的拆分重组的过程分析
头大了两圈,貌似终于想通了TMPGEnc的拆分组合原理——TMPGEnc只做一件事:如果片子是“Top field first (field A)”型,那它就会在拆帧成场后,以奇数场优先顺序重新顺序两两组合场成帧,以得到正序;如果片子是“Bottom field first (field B)”型,那它就会在拆帧成场后,以偶数场优先顺序重新顺序两两组合场成帧。以得到正序。
在TMPGEnc里:MPEG设定→高级→场的顺序→有两个选项:“Top field first (field A)”和“Bottom field first (field B)”。选项说明:这个设定在以下情形中起作用:a、MPEG-2 隔行扫描;b、逆转为Telecine;c、消除交错信号。“逆转为Telecine”的意思就是IVTC(反胶卷过带)。
下面是TMPGEnc到底如何拆分5帧(最小序列单位)为10帧的具体过程分析:
1、“Top field first”型:
A1│A1│B1│C1│D1│
A2│B2│C2│C2│D2│ <-- 这个就是“Top field first”型的具体结构
→ TMPGEnc → Top field first (field A) →
⌒ ⌒ ⌒ ⌒ ⌒ ⌒ ⌒ ⌒ ⌒ ⌒
A1│A2│A1│B2│B1│C2│C1│C2│D1│D2│ → 两两顺序组合 →
A1│A1│A1│B1│B1│C1│C1│D1│D1│A1(下一个)│
A2│A2│B2│B2│C2│C2│C2│C2│D2│D2│ → 反交错滤镜:偶数-奇数场(场) →
A1│A1│A1│B1│B1│C1│C1│D1│D1│A1(下一个)│
A2│A2│B2│B2│C2│C2│C2│C2│D2│D2│
1 0 0 1 0 1 0 0 1 0
此时我们可以看到如果以场为帧,顺序是:A2│A1│B2│B1│C2│C1│C2│D1│D2│A1(下一个)│(正序)。如果使用“1001010010”算法,可以完美得到原本的24FPS。
但是如果我们错选为“Bottom field first (field B)”型:
A1│A1│B1│C1│D1│
A2│B2│C2│C2│D2│ <-- 这个就是“Top field first”型的具体结构
→ TMPGEnc → “Bottom field first (field B)” →
A2│A1│B2│A1│C2│B1│C2│C1│D2│D1│ → 两两顺序组合 →
A1│A1│A1│A1│B1│B1│C1│C1│D1│D1│
A2│B2│B2│C2│C2│C2│C2│D2│D2│A2│ → 反交错滤镜:偶数-奇数场(场) →
A1│A1│A1│A1│B1│B1│C1│C1│D1│D1│
A2│B2│B2│C2│C2│C2│C2│D2│D2│A2│
1 0 0 0 0 0 1 0 1 0
此时我们可以看到如果以场为帧,顺序是:A2│A1│B2│A1│C2│B1│C2│C1│D2│D1│,出现倒退帧。并且不能使用任何算法,不能完美得到原本的24FPS。
2、“Bottom field first”型
A1│B1│C1│C1│D1│
A2│A2│B2│C2│D2│ <-- 这个就是“Bottom field first”型的具体结构
→ TMPGEnc → “Bottom field first (field B)” →
A2│A1│A2│B1│B2│C1│C2│C1│D2│D1│ → 两两顺序组合 →
A1│A1│B1│B1│C1│C1│C1│C1│D1│D1│
A2│A2│A2│B2│B2│C2│C2│D2│D2│A2│ → 反交错滤镜:偶数-奇数场(场) →
A1│A1│B1│B1│C1│C1│C1│C1│D1│D1│
A2│A2│A2│B2│B2│C2│C2│D2│D2│A2│
1 0 0 1 0 1 0 0 1 0
此时我们可以看到如果以场为帧,顺序是:A2│A1│A2│B1│B2│C1│C2│C1│D2│D1│(正序)。如果使用“1001010010”算法,可以完美得到原本的24FPS。
但是如果我们错选为“Top field first (field A)”型:
A1│B1│C1│C1│D1│
A2│A2│B2│C2│D2│ <-- 这个就是“Bottom field first”型的具体结构
→ TMPGEnc → Top field first (field A) →
A1│A2│B1│A2│C1│B2│C1│C2│D1│D2│ → 两两顺序组合 →
A1│B1│B1│C1│C1│C1│C1│D1│D1│A1│
A2│A2│A2│A2│B2│B2│C2│C2│D2│D2│ → 反交错滤镜:偶数-奇数场(场) →
A1│B1│B1│C1│C1│C1│C1│D1│D1│A1│
A2│A2│A2│A2│B2│B2│C2│C2│D2│D2│
1 0 0 0 0 0 1 0 1 0
此时我们可以看到如果以场为帧,顺序是:A2│B1│A2│C1│B2│C1│C2│D1│D2│A1│,出现倒退帧。并且不能使用任何算法,不能完美得到原本的24FPS。
另外,TMPGEnc里没有“奇数-偶数场(场)”:如果你看上边把红色的场部分与黑色的部分交换一下,你会发现其实结果是一样的。
三、实际例子的场顺序表现:
关于上边的分析,TMPGEnc里使用“CTRL+P”输入“1111111111”,反交错滤镜选择“偶数-奇数场(场)”有以下几个实际例子效果:
1、GIG-OP.VOB(攻壳机动队2):如果TOP优先,那么顺序正常,如果BOTTOM优先,则倒退帧连连不断。
2、Chobits-op.VOB:如果TOP优先,仅明显观察到原始帧序的89b出现倒退(不过,这段本来就变化很特别,变化顺序不是容易看出)。如果BOTTOM优先,则全部正常。
3、SCRAPPED+PRINCESS NCOP.vob: 如果TOP优先,则第一个24/24FPS渐变及之前出现倒退,之后的以及第2个渐变全部正常。如果BOTTOM优先,第1个24/24FPS渐变及之前的正常,但后面的基本上全部出现倒退。分析来看,它是由TOP型一段连接了BOTTOM型一段。
SCRAPPED+PRINCESSNCOP.vob的现象其实是我如此大费周折分析原理的原因。以后我们做60FPS的话似乎需要注意下,不行的话则连过渡处都要分段处理了。要不逐行的显示器看来就没法看了。
不过这种情况,使用24IVTC后再对细小处进行“帧率加倍”反交错更适合吧。或者干脆舍弃部分场,直接CTRL+P输入“1010101010”然后使用反交错滤镜 “奇数场”来做30FPS算了。
四、最标准的60FPS的做法:
最标准也最完美的60FPS处理做法(120FPS、VFR等等都可以靠边去了):每一帧拆成奇偶场,然后宽高均缩小一半,即整个画面缩小为原画面的1/4。原因是隔行的电视为隔行(奇偶场)而优化,但电脑用的显示器比较精细为逐行而优化。因此,不缩小画面也不补象素的话,对于显示器而言意味着超重的锯齿(因为对于奇数场的两行象素间少了一个偶数场的过渡象素)。
做法简易图示:TMPGEnc中首先按“ctrl+p”,然后输入“1111111111”,然后从第一帧开始,右键菜单选择“指定从本帧开始的交错解除方式”为“偶数-奇数场(场)”:如果原片子不是由几段TOP和BOTTOM段组合,那么就直接OK;如果是的话,请分段重复以上步骤。
五、24/30FPS的overlay的图示:
A1│A1│B1│C1│D1│
A2│B2│C2│C2│D2│ 左边24FPS部分。随意选了个“Top field first”型
a1│b1│c1│d1│e1│
a2│b2│c2│d2│e2│ 右边30FPS部分
上下混合overlay(mix):
A1a1│A1b1│B1c1│C1d1│D1e1│
A2a2│B2b2│C2c2│C2d2│D2e2│ → TMPGEnc → Top field first (field A) →
A1a1│A2a2│A1b1│B2b2│B1c1│C2c2│C1d1│C2d2│D1e1│D2e2│ →两两顺序组合→
A1a1│A1b1│A1b1│B1c1│B1c1│C1d1│C1d1│D1e1│D1e1│A1a1│
A2a2│A2a2│B2b2│B2b2│C2c2│C2c2│C2d2│C2d2│D2e2│D2e2│ → 反交错滤镜:偶数-奇数场(场) →
A1a1│A1b1│A1b1│B1c1│B1c1│C1d1│C1d1│D1e1│D1e1│A1a1│
A2a2│A2a2│B2b2│B2b2│C2c2│C2c2│C2d2│C2d2│D2e2│D2e2│
1 0 0 0 0 0 1 0 1 0
1 0 0 奇 0 奇 0 0 1 0
在这种60FPS下,看上边红色的部分,无论是左边24FPS还是右边30FPS都是正序。并且左右两边的画面信息都被全部保留。
六、对于24/24FPS或者24/30FPS的渐变的几种IVTC处理办法:
针对下面这个序列“24/30FPS的overlay(mix)”:
A1a1│A1b1│A1b1│B1c1│B1c1│C1d1│C1d1│D1e1│D1e1│A1a1│
A2a2│A2a2│B2b2│B2b2│C2c2│C2c2│C2d2│C2d2│D2e2│D2e2│
1 0 0 1 0 1 0 0 1 0
1 0 1 0 1 0 1 0 1 0
a、以场为帧,60FPS做法:如上分析。
b、补象素,24FPS做法:
我们还原保证左边的24FPS部分的正确IVTC(A、B、C、D)——ctrl+p输入“1001010010”获得左边的正确IVTC,
A1a1│B1c1│C1d1│D1e1│
A2a2│B2b2│C2c2│D2e2│
然后很明显,中间两帧仍然存在来自右边30FPS的交错,如果我们继续简单的把中间两帧取场做帧,比如取奇数场:不仅存在丢场(b2)的问题,还有图象模糊的问题。
c、补象素,30FPS做法:
我们还原保证右边的30FPS部分的正确IVTC(a、b、c、d、e)——ctrl+p输入“1010101010”获得右边的正确IVTC:
A1a1│A1b1│B1c1│C1d1│D1e1│
A2a2│B2b2│C2c2│C2d2│D2e2│
那么,第2、第3两帧存在来自左边24FPS的交错,如果我们简单的把这两帧取场做帧,比如取奇数场:场是不丢了,但图象模糊的问题还在。
而且,如果做成30FPS的,那么左边24 FPS的部分会重复一个场。例如C1。由于重复某个场,会导致该场的显示时间改变:比如原本是1/24秒,会变成1/30秒*2,因此在运动变化上会出现不均匀的现象。即使这种变化未必能被我们所觉察,但还是不建议对于SCRAPPED+PRINCESS NCOP.vob这种左右均为24FPS的渐变进行30FPS化或者60FPS化。
d、补象素,帧场混合式60FPS做法:麻烦,也不怎么好用。
A1a1│A1b1│A1b1│B1c1│B1c1│C1d1│C1d1│D1e1│D1e1│A1a1│
A2a2│A2a2│B2b2│B2b2│C2c2│C2c2│C2d2│C2d2│D2e2│D2e2│ <-- 24/30FPS的overlay(mix)
你只要在这里视片源情况进行手动反交错即可。如果你选择做成24FPS的话,你只能在这10帧里挑出4帧;如果你选择做成30FPS的话,你只能在这10帧里挑出5帧;如果你做成60FPS,此时就可以把这10帧全部使用。
此情况最复杂我们的灵活性也最大。单场、双倍、自适应、拷贝帧,手法随你用。只要能保证流畅性,怎么漂亮怎么好看就怎么来吧。
(此外,我们还可以在这个基础上进行改进,也就是当某一帧不得不使用单场的话,我们可以通过AVS以及其他AU的插件对这一单场进行美化。例如:AVS写法:先柔滑再锐化。此外,有文档表明AU里面还有个二次反交错插件,可以把某一帧在IVTC后单独进行改进,没有用过。仅供了解。)
其实呀,这里就要看是哪部分比较重要了:如果背景重要,就可以做成24FPS的,如果前景比较重要,就可以做成30FPS。两者都想保留最多信息的话就可以考虑60FPS的做法。
总之,以上交错情况我们都只能无限的接近完美。而不能说哪个是最正确的做法。
顺便说下我对IVTC的一些理念问题:首先我们要明确一个概念,由于过去的兼容性标准,导致在模拟与数字之间存在着一些根本的矛盾(关于这一点,我就不准备展开叙述了,大家了解即可)。因此,不存在所谓最正确的做法,只存在不断接近完美的做法。因此RIP就好比翻译,“信、达、雅”原则仍然适用。第一要播放顺序正确,并尽可能保持原汁原味,完美点也就是不要遗失任何画面信息,;第二要尽可能没有交错,再要求完美点就是没有交错;第三要尽可能画面漂亮,无锯齿、无模糊等等最好。
举个例子:EVA09的那个倒记时字幕交错,如果要“信”和“达”,就要至少做成30FPS,以便保留全部的字幕,但这样做会出现大量不美的帧,比如锯齿、因拷贝帧而带来的停顿等等,考虑到“雅”,这部分字幕的意义远没有背景动画重要,而且缺少部分字幕并不会引起歧义,因此,最后考虑的结果是:优先背景,做成24FPS。EVA09当时用的滤镜是“帧率加倍(场-自适应)”,这算是个局部反交错的滤镜,简易而接近目的的处理了交错。
七、60FPS的一些扩展想法(没有特别的实用处,仅仅供大家做为一种思路参考):
另外,我们还可以用以拷贝帧为基础的复杂式60FPS来做成单一60FS帧速或者30FPS的。但是因为过于烦琐以及缺陷几率的增大,其实用价值太小了。顺便写出仅供大家了解。
做法:以30FPS的交错处理手法,把纯24FPS与纯30FPS部分都解除然后每一帧后都使用一下拷贝帧变成60FPS(如果不做拷贝,那么就是30FPS,后面的渐变解除也要做成30FPS,以便做成单一30FPS的);然后用60FPS的做法解除渐变处的交错。最后连接全部片段即可。
首先处理纯24FPS部分成30FPS或者60FPS。
A1│B1│C1│D1
A2│B2│C2│D2 --->胶卷过带 ---->
A1│B1│C1│C1│D1│
A2│A2│B2│C2│D2│-- 24FPS部分 --> TMPGEn ---->BOTTOM---->
A2│A1│A2│B1│B2│C1│C2│C1│D2│D1│
A1│A1│B1│B1│C1│C1│C1│C1│D1│D1│
A2│A2│A2│B2│B2│C2│C2│D2│D2│A2│
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
1 2 3 4 5 6 7 8 9 10
简化一下:ctrl+p输入1001012010 获得了
A1│B1│C1│C1│D1│
A2│B2│C2│C2│D2│
↑ ↑ ↑ ↑ ↑
1 3 6 7(6) 9
这个要仔细看啊,不是24FPS的1001010010,而是以拷贝帧为基础的1001012010算法获得的30FPS。也就是把24FPS转成了30FPS。当然你也可以ctrl+p输入1221212212 获得60FPS。检查好麻烦那,还有潜在的运动不均匀缺陷。放弃!
最后:TMPGEn本身那个做复杂式24/30FPS到60FPS化的滤镜太简陋了,非常的不可靠。
至本文,TMPGEn的相关测试完结。(小声说,希望不要再出修正版的修正版了^0^)
dio1888@2006-04-01 01:05
好教程一定要顶:D
dizyh兄的网站挺有诗意的:cool:
dizyh@2006-04-01 12:31
嘿嘿,谁叫咱是做网站设计的,如果弄个拿不出手的东西,怎么有脸见哥们~~:D
GOD_HIKARU MK2@2006-04-01 18:59
囧看完了头晕
zmaya@2006-06-04 21:34
好是好 ,只是看着有些头晕。
GOD_HIKARU MK2@2006-06-04 23:26
=__= 哇这贴 被人顶上来了. 真有本事
| TOP