[SilkyBible] Crop&Resize系列

作者:Silky                                    整理:net1999

 

引用 12-31-2002resize 的错误一般看不出来,如同我上面转贴的那个问答中所讲的:

Fortunately,even if you had used wrong methods for scaling/resampling the image, thedifference between the correct aspect ratio and a wrong aspect ratio is oftensmall enough to go unnoticed unless you really start looking for it.

大致上的意思:

幸运的,虽然你用了错误的 resize 方法,不过这个正确的比例和错误的比例之间的差距,

通常是很小的而不会被注意到,除非你开始真的去观察、注意这个错误。

 

这个错误大概会造成 ~2.5% 的比例错误。

有人做过实验,用 DV 去拍圆球,使用错误的 resize 法,会让正圆的球体变成椭圆。

PowerDVD,WinDVD 等这些软件的 DVD Player 所做的 resize 也都是错误的。

(WinDVD 新版的已经了解到这个问题,开始改进)

所以大家在计算机上看了那么久的 DVD,比例都是错的 

不过如上述所讲的,幸运的,一般没有注意的话是看不出来的。

不过一旦发现了以后,就会开始注意到这个错误了  

 

为什么直接 resize 是错的呢?因为根据 ITU-R BT.601,取样的时候长宽的取样比例不是 1:1,

PAR(Pixel Aspect Ratio)不是 square pixel,正方形的 pixel,而是长方形的 pixel。

NTSC 的 PAR 是 10:11,也就是说如果横轴每隔 1cm 取样一点,纵轴就是每隔 1.1cm 取样一点,

取样的间距是 1:1.1 = 10:11。

横轴取样的间距比较短,也就是取样的次数比较密集,也就是取样出来的点数会比较多。

假设原始影像是 PAR 1:1 640x480 的图形,经过 ITU-R BT.601 重新取样后,

分办率会变成 PAR 10:11 704x480(高度 480 不变,长度变为原本的 1.1 倍,640*1.1=704,

横轴的点数变多),而不是 720x480。

所以 NTSC PAR 10:11 720x480 的 DVD 要 resize 到 PAR 1:1 640x480,要左右共砍 16 个点,

变成 704x480 再 resize 到640x480 才会正确。

 

不知道这样解释容易了解吗? ^^;

公式是

PAR =DAR * (水平分辨率/垂直分辨率)

 

DAR 是 Display Aspect Ratio,譬如说电视是 4:3

NTSC 的 PAR 是 10:11,所以

4/3 =10/11 * 704/480

 

要从 704x480 resize 到 640x480/512x384... 才会得到正确的 DAR 4:3 的比例。

 

而 PAL 的 PAR 则是 59:54

4/3 =59/54 * 702.91/576

 

所以要先截边变成 702.91,再 resize 到640x480/512x384... 才会得到正确的 DAR 4:3 的比例。

 

我没有研究过 PAL 的算法,刚刚用 GKnot 帮忙算了几组正确的比例(要让 Aspect Error 这个项目

显示的百分比为 0%,水平分辨率必须能被 32 整除,垂直分办率必须能被 16 整除),

得到下面的结果(因为无法截边为 702.91,GKnot 是取整数702):

PAL4:3

720x576-> 702x576 -> 704x528 /Aspect Ratio 1.333(4:3), Aspect Error 0%

 

注意,虽然此时 GKnot 显示 W-Zoom(水平放大)为 100%(没有放大),

但是实际上水平已经由 702 放大到 704,只是放大的幅度太小所以忽略。

我没有实际压过,不知道这样到底好不好。

 

720x576-> 702x576 -> 640x480 /Aspect Ratio 1.333(4:3), Aspect Error 0%

720x576-> 702x576 -> 576x432 /Aspect Ratio 1.333(4:3), Aspect Error 0%

720x576-> 702x576 -> 512x384 /Aspect Ratio 1.333(4:3), Aspect Error 0%

720x576-> 702x576 -> 448x336 /Aspect Ratio 1.333(4:3), Aspect Error 0%

720x576-> 702x576 -> 384x288 /Aspect Ratio 1.333(4:3), Aspect Error 0%

720x576-> 702x576 -> 320x240 /Aspect Ratio 1.333(4:3), Aspect Error 0%

.....

 

如果电影比例小于 4:3,上下会多出黑边,此时就把黑边削掉就好,

只要注意高度必须能被 16 整除。

 

 

PAL16:9(anamorphic,原始影片上下无黑边,变形画面,完全填满整个 720x576 的画面)

720x576-> 702x576 -> 704x396 /Aspect Ratio 1.778(16:9), Aspect Error 0%

 

注意,虽然此时 GKnot 显示 W-Zoom(水平放大)为 100%(没有放大),

但是实际上水平已经由 702 放大到 704,只是放大的幅度太小所以忽略。

注意高度 396 不能被 16 整除,所以resize 完以后,要上下多补 2 个 pixel 的黑边,

补成 704x400 再送进去压缩。

如果电影比例小于 16:9,上下会多出黑边,此时就把黑边削掉就好,

只要注意高度必须能被 16 整除。

 

720x576-> 702x576 -> 640x360 /Aspect Ratio 1.778(16:9), Aspect Error 0%

 

注意高度 360 不能被 16 整除,所以resize 完以后,要上下多补 4 个 pixel 的黑边,

补成 640x368 再送进去压缩。

 

720x576-> 702x576 -> 576x324 /Aspect Ratio 1.778(16:9), Aspect Error 0%

 

324 不能被 16 整除,补为 576x336。

 

720x576-> 702x576 -> 512x288 /Aspect Ratio 1.778(16:9), Aspect Error 0%

720x576-> 702x576 -> 480x270 /Aspect Ratio 1.778(16:9), Aspect Error 0%

270->补为272

 

720x576-> 702x576 -> 448x252 /Aspect Ratio 1.778(16:9), Aspect Error 0%

252-> 256

 

720x576-> 702x576 -> 384x216 /Aspect Ratio 1.778(16:9), Aspect Error 0%

216-> 224

.....

 

其它还有很多组可以自行利用 GKnot 计算。

(算 16:9(anamorphic) 的时候先把 H-Modul = 16(高度必须能被 16 整除的限制)改成 1,

这样的弹性比较大,会有比较多组可以选择,等算好 resize 后的大小后,如果高度不能被 16 整除,

再自行考虑要多补,或者是削掉多少黑边)

 

 

 

引用 01-01-2003OK,再来讲更复杂的 ^^;

 

前面说到根据 CCIR601,模拟影像转为数字时(由电影胶片转为数字格式,如 D1),

由于取样的长宽间距(Sample Aspect Ratio/SAR or Pixel Aspect Ratio/PAR)不一样,

假设 NTSC 是横轴每 1cm 取样一点,纵轴便是每 1.1cm 取样一点,取样的长宽间距不一样,

不是 1:1(square pixel),而是 1:1.1(non-square pixel),所以影像在计算机上看是变形的。

由于横轴的取样间距短,取样次数较频繁,所以取样出来的点比较多。

NTSCPAR 1:1.1 704x480 的影像(变形的)其实等于 NTSC PAR 1:1 640x480(4:3) 的影像。

704/1.1= 640

或者反过来看,纵轴点数一样多(480),横轴 PAR 1:1.1 的点数要比 PAR 1:1 的多出 1.1 倍

640*1.1= 704

 

所以我们拿到 NTSC 的 DVD,规格是 PAR1:1.1 720x480,要 resize 到640x480,

或其它 4:3 的比例,直接从 720x480 -> 640x480 是错误的,必须要左右截边变成 704x480,

再 resize 到 640x480,这样比例才会正确。

因为 PAR 1:1 640x480 的画面,对应的 PAR 1:1.1 画面大小是 704x480,

而非 720x480。

 

同样的道理 PAL 的 PAR 是 59:54,假设横轴每 5.9 的单位长度取样一点,

纵轴便是每 5.4 的单位长度取样一点,横轴的取样间距较长,取样次数较稀少,

取样出来的点比较少。

所以 PAL PAR 59:54 702.91x576 的影像其实等于 PAL 1:1768x576(4:3) 的影像。

702.91/(54/59)= 768

或者反过来看,纵轴点数一样多(576),横轴 PAR 59:54 的点数要比 PAR 1:1 的少 54/59 倍。

768*(54/59)= 702.91

 

所以我们拿到 PAL 的 DVD,要 resize 到 768x576/640x480 或其它 4:3 的比例,

直接从 720x576 -> 768x576/640x480 是错误的,必须要左右先截边变成 702.91x576,

再 resize 到 768x576/640x480 ...。

 

ps.702.91 是近似值,实际上的数字应该是 702+54/59 = 702.915254237288135593220338983050847..

为了数字化处理方便,使用 704 来代替。

也就是 720x576 削边-> 704x576 ->640x480 ... etc,16:9 也是先削边704x576 -> 640x360 ...。

做 PAL VCD 的时候,VCD 的PAR 和 DVD 相同,所以要削边 704x576 两边等倍缩小 1/2 => 352x288。

 

这个是上次说的,那么 NTSC 10:11/PAL 59:54 这个 PAR 是怎么算来的呢?

因为要整合 NTSC 和 PAL 系统,减少硬件设计成本,所以 ITU-R BT.601 把取样频率定为 13.5MHz,

然而对 525-line NTSC (ANSI/SMPTE 170M-1994) 的模拟讯号,要取样成 1:1 的 square Pixel,

根据 SMPTE 244M "industry standard" square pixel,取样频率必须是 12 + 27/99 MHz。

所以可以得到 525-line Rec.601 NTSC 的 PAR 是 13.5 / (12 + 27/99) = 11/10 (y/x)

 

而对 625-line PAL (Rec. ITU-R BT.470-3) 的模拟讯号,要取样成 1:1 的 square Pixel,

取样频率必须是 14.75MHz,所以可以得到 625-line Rec.601 PAR = 13.5/ (14.75) = 54/59 (y/x)

 

最后总结,关于比例,Doom9 上也讨论过好多次,有兴趣者可以自行查阅,或是参考下列两个网址

https://www.mir.com/DMG/aspect.html

https://www.lurkertech.com/lg/pixelaspect.html

能看繁体中文的话,请看 DVD2AVI 的作者 jackei 的解说

https://bbs.irradiance.net/txtVersion/boards/animation/M.982241028.A/PostThreadList.html

https://bbs.irradiance.net/txtVersion/boards/animation/M.1022228442.A/PostThreadList.html

 

 

然而也许有人会注意到,根据这个网页

https://www.uwasa.fi/~f76998/video/conversion/

NTSC 的 PAR 竟然不是 10/11 (x/y),而是 72/79;PAL 的 PAR 竟然不是 59/54,而是 128/117!

这又是怎么回事呢?

这就是令人头痛的地方,也就是复杂的地方 ^^;

 

下面有点复杂,我没有保握能够解说得很简单清楚明了,建议最好仔细阅读以上提供的网页再往下看。

 

前面计算 PAR 的时候,我们是拿 13.5MHz 直接去除 "industry standard" 的 squarepixel

的取样频率,来求得 NTSC 和 PAL 的 PAR。但是实际上这些 "industry standard" 的取样频率,

取样出来的仍然不是 1:1 的 square pixel,只是很接近 square pixel,所以直接这样除,

得到的 PAR 并不精确。

 

精确的计算方法:

625/50PAL 每一条扫瞄线的取样时间为 64μs,实际上用来记录数据的时间只有52μs,

其它时间用来同步和等待扫瞄线归位,所以要记录 1:1 768x576,取样频率应该是

52μs* (14 + 10/13)MHz = 768

 

一条扫瞄线要 768 点(取样 768 次),取样时间 52μs,反算回来取样频率就得要是

14 +10/13 MHz,而不是 "industry standard" 的 14.75MHz。

 

525/59.94NTSC 每一条扫瞄线的取样时间为 63+5/9 (63.555...) μs,

实际上用来记录数据的时间只有 52+2/3 (52.666...) μs,其它时间用来同步和等待扫瞄线归位,

所以要记录 1:1 640x480(648x486),取样频率应该是

52+2/3μs* (12 + 24/79)MHz = 640(648)

 

而不是 SMPTE 244M "industry standard" square pixel 的 12 + 27/99 MHz。

 

所以根据正确的纪录时间(PAL 52μs/NTSC 52+2/3μs)来推算 PAR,得到的结果就是

NTSC72/79,PAL128/117 了。

 

头开始痛了吗? ^^;

本来我们都已经习惯左右截边 -> 704 之后再 resize,这也是一般看到的作法,

大家都是这么作的,结果根据这个算法,NTSC PAR 变成是 72/79,

本来是

640 *11/10 = 640*1.1 = 704

 

现在变成

640 *79/72 = 702 + 2/9

 

要截边为 702 + 2/9 再 resize 为 640x480 才是正确的。

 

不过该网页的作者也建议,还是使用 704 比较好,704 这个数字刚好可以被 16 整除,

704 这个数字刚好是 VCD 352 的两倍,704 刚好是 VCD 可以存放的静态图片的最大分办率,

704 刚好是 ATSC 数字电视的标准分办率...

有这么多的 "巧合",所以我们还是选择削边为 704 来处理。

DVD2AVI的作者也是建议,还是以704 来处理。

 

而 PAL 就很有趣了,因为 PAL 真正的 PAR 是 128/117,所以

768 *117/128 = 702

 

刚刚好等于 702 一点都不差!

所以也许 PAL DVD 要 resize 为PAR 1:1 640x480/512x384 ...,

截边为 702 之后再 resize,会比704 更好。

 

讲完正确的 resize 作法之后,小弟也就可以功成身退了   

 

 

 

引用 01-04-2003文笔太差,写到我自己都看不懂 ^^;

 

工具有很多,例如 DVD2AVI 的 Video -> Clip & Resize,

选好左边和右边要切多少点,两边切的点数不一样没关系,

总之左右加起来为 16 点(->704)或18 点(->702)即可。

DVD 的画面通常左右都会留下黑边,画面不一定在正中间,哪一边黑边留得多就哪边削多一点。

然后存为 .d2v。

DVD2AVI不能切为->702,如果要切为 702,可以用其它软件来处理。

例如 Avisynth 的 Crop 也是切边的,AviUtl 里面也有切边的工具,

TMPGEnc,VirtualDub 都有,看你是要照以前的习惯切为 704,

或是按照那个网页说的切为 702 都可以。

切边以后,再进行 Resize -> 4:3 or 16:9 的比例,这样就会正确了。

只是要注意水平最好要能被 32 整除,垂直最好要能被 16 整除,

如果上下有多余的黑边再把黑边削掉即可,

 

例如:

 

NTSC16:9(anamorphic) 原始分辨率 720x480

DVD2AVIClip 削边为704x480 存成 .d2v。

或是 MPEG2DEC.DLL 利用 Avisynth 的 Crop

#Crop(clip, int left, int top, int width, int height)

Crop(8,0,704,480)

 

附带一提,Avisynth 说明档中也有下面这个范例,大家可以找出来看看:

Cropcrops excess pixels off of each frame. If your source video has 720x480resolution,

andyou want to reduce it to 352x240 for VideoCD, here's the correct way to do it:

#Convert CCIR601 to VCD, preserving the correct aspect ratio

ReduceBy2

Crop(4,0,352,240)

 

如果你要从 CCIR601 720x480 resize 到 VCD 352x240,**两边等倍缩小** 1/2(ReduceBy2),

然后左右各切 4 个点,360x240 -> 352x240,或是先左右各切 8 个点,再 704x480 -> 352x240,

这才是正确作法,直接从 720x480 -> 352x240 是**错误的**。

原因上面已经讲过,不再赘述。同样的,PAL 720x576 -> 360x288 -> 352x288,

或 720x576 -> 704x576 -> 352x288,这样才是正确的。

一定要**两边等倍缩小**,为什么?DVD 和 VCD 的 PAR 相同,原本10:11,要两边等倍缩小,

同除 2,10/2 : 11/2 = 10:11,PAR 才会仍然保持为 10:11。

 

不止 DVD/VCD 如此,DV 也是一样。

 

言归正传,如果要用 Avisynth 切边为 702

Crop(9,0,702,480)

 

注意此时左右两边各切 9,这是一个大问题。

前面曾经提过 702.91 最接近的数字 703 这个数字数字处理不好处理,

所以改用 704,和这个道理很像。

因为 YUY2/YV12 格式的水平,色彩(Chroma)信息是每两个 sample 取样一个,

所以切的时候,一定要以偶数为单位切割(亮度 Y 切 8,色度 C 就要切 8/2 = 4,

Y 如果切 9,那么 C 要怎么切?),所以如果要切 9,就不能以 YUY2/YV12 模式处理,

要转为 RGB 模式才可以。

 

如果你是用 TMPGEnc, AviUtl, VirtualDub 切割,因为这些软件以 RGB 模式处理,

所以没有以上的限制。

 

假设我们是切为 704x480,resize 为16:9 后是 704x396,396 不是 16 的整数倍,

上下填黑,补成 400 再压缩。例如 Avisynth 上下填 2 个 pixel:

#AddBorders(clip, int left, int top, int right, int bottom)

AddBorders(0,2,2,0)

 

或是用 VirtualDub 的 resize filter:

Expandframe and letterbox image

Framewidth : 704

Frameheight : 400

Fillcolor : 选黑色

 

AviUtl有另外的plug-in 可以做填黑,处理的优先顺位要调到 resize 之后,

相信会用的人自然知道,不用小弟多言。

 

TMPGEnc..等,也是一样的作法,做完以后再压缩就可以了。

 

至于几个正确的分辨率,前面已经有算好了,直接拿来用就可以了。

如果不要用 702,想用 704,将前面那些算好的数字 702 改为 704 即可。

想用其它分辨率可以用 Gordian Knot 帮忙算。

 

我刚刚才发现,新出的 Gordian Knot 0.27 版已经改为使用那个网页上的计算方法,

以 702 为正确的切边数字。现在 NTSC 用 704 会显示是错误的 Aspect Ratio,

和 PAL 一样,要用 702 才会得到正确的结果... 真麻烦啊,NTSC 我还是想用704 耶...

 

希望这样补充可以帮得上忙。  引用01-05-2003也许有人看过 Nicky 写的这篇:

https://nickyguides.digital-digest.com/bilinear-vs-bicubic.htm

 

他的建议是

放大用 bicubic

缩小用 bilinear

 

一般我们做 DVDRip 的时候都是用缩小 resize,放大留给播放的时候再去放大。

 

缩小 resize 的计算步骤

1.pre-filter

2. 坐标变换

3.post-filter

 

resize的时候,要计算像素的坐标变换,例如 704x480 -> 320x240,

新画面坐标 (99,99) 这个点对应到原画面,是 (217.8,198) 这个点,

落在原画面的整数像素之间。

704/320= 2.2

x =99*2.2 = 217.8

 

480/240= 2

y=99*2 = 198

 

所以 (99,99) 对应的 (x,y) 是(217.8,198)

 

当然原画面是没有 (217.8,198) 这个点的数值,那我们要计算这个位置的像素值应该是多少,

也就是对应过来的新画面坐标 (99,99) 的像素值是多少。

那要怎么计算这个在像素中间的值呢?

我们会利用内插法,也就是利用这个点周围邻居的像素值,来推算这个位于像素中间的数值。

这个内插法使用的 interpolation filter 也就是步骤三的 post-filter,

常见的有以下几种方法:

1.Nearest neighbor: 最近邻居法,就是很简单的直接拿最靠近的邻居(像素)数值来使用。

 

2.bilinear: 使用周围 2x2,4 个邻居做垂直、水平的线性内插。

 

3.bicubic: 使用周围 4x4,16 个邻居来做内插,内插的算式比较复杂,按距离的远近有不同的权重。

 

缩小的时候会发生一种瑕疵叫做 aliasing,也就是原本的高频被当成低频讯号,

使得缩小后的低频出现不正确的结果。

从画面上看起来 aliasing 会造成 moire 和 锯齿,线条会一格一格的很难看。

解决的方法是步骤一,先用一个 pre-filter 滤掉 resize 后无法正确记录、

会引起 aliasing 的高频讯号,然后再 resize,这样就可以解决 aliasing 的问题。

 

但是这个 pre-filter(也就是一个 low pass filter)的设计有两个困难。

不同种类的 filter 滤除高频的特性不一样,有的会造成画面模糊。

如果 filter 的 tap 数越高(计算的像素个数越多),计算越精确,

品质当然越好。但是 tap 数太高,会造成另一种瑕疵叫做 ringing effect,

所以这个 filter tap 数不能太高。

但是如果 tap 数太低,无法无法良好的滤除高频,又会发生 aliasing 的瑕疵。

所以这是一个两难,必须视缩小率来调整最恰当的设计。

 

Avisynth的 bicubic 设定

#BicubicResize(clip, int target_width, int target_height, float "b",float "c")

 

其中参数 b 代表模糊的程度,c 代表ringing 的程度。

默认值是 b = 1/3, c = 1/3。

b =0, c = 0.75 等于 VirtualDub 的 "precise bicubic"。

Avisynth建议,理论上保持 b+ 2 * c = 1 会得到最正确、最适当的 filter 结果。

例如 b = 0, c 便要 = 0.5,如果 c 超过 0.5 就会产生ringing 瑕疵。

 

bilinear的画面比较模糊,但是也比较好压缩,做 1 CD 的时候,用 bilinear 会比较好。

SimpleResize这个 resize 法就等于 bilinear 拿掉 triangle filter,

所以它的画面会比 bilinear 锐利一点。

如果你的画面本来就很锐利,用 SimpleResize 缩小,那么就会出现 aliasing 瑕疵。

 

 

前面的讨论中,我们有提到一个 resize 的王者,叫做 lanczos3。

这个 resize 法是一种 decimation filter,本身具有 low pass 的效果,

也就是使用 lanczos windowed 的 FIR Low Pass Filter,它的 tap 数会根据缩小率

自动变化,在清晰度和 ringing effect/aliasing 等瑕疵之间取得最佳的平衡点。

所以 lanczos3 等于自己是一个完美的 low pass filter :p

根据大家的实验,lanczos3 可以保留最多的细节,而又不会造成太大的压缩困难,

所以建议如果码率够的话,用 lanczos3 可以得到最佳的结果。

相关讨论,可以看日本的网站或 Doom9。

 

另外,lanczos3 处理放大,效果也很不错。

放大缩小都行,所以说它是 resize 的王者 :p  

 

 

 

 

 

 

引用 02-11-2003引用在播放和VDMOD窗口时都会有黄线,而且我输入的宽度能被32整除,高度能被16整除。

 

还有一事不明,困扰很久,一并请教。

有几点不明:

1、要同时满足左右两边共切掉16点、上下切掉多余黑边、而且还要保持aspect ratio error为0,经常会出现不能兼顾的情形。如何取舍?

2、两边虽然满足共切掉16点,但是如果两边各自切掉的不是偶数点,例如各自切掉7+9=16,那么是不是在压缩时不能工作在YV12空间?

3、最后想请Silky兄讲解一下用GK做RISIZE和CROP的详细步骤,尤其是做risize和crop的顺序问题。  抱歉近日事情繁忙这么晚才回复。

 

1. 不会有不能兼顾的情况啊,左右共切 16 个点之后,不论是 resize,或是上下再多切黑边,甚至上下再多补黑边,都不会有 PixelAspect Ratio 错误的情况。只要一开始有先切边再作其它处理就不会有错了。唯一要考虑的是,AVI 档案格式没有纪录 Display Aspect Ratio 的功能,所以播放时无法自动调整画面比例,在压好 AVI 之前,需先设定好原始长宽比例为正确的播放比例,如 4:3(640x480)16:9(704x396->704x400,上下多补黑边不影响播放比例)2.35:1... 等等。所以不会有不能兼顾的情况啊。

 

2. 看了您这篇我才注意您还有用 resizefilter 作 crop,用 avisynth 作 crop 的时候,不可以切奇数的点,譬如说不可以切您举的例子中的 7+9 这样的点,7, 9 都不是偶数。为什么一定要切偶数的点呢?我在以前讲 resize 的帖子中有提过,YUY2 或 YV12 格式 UV 的分辨率只有 Y 的一半,YUY2 水平每两个点共享一个 UV,YV12 水平和垂直每两个点共享一个 UV,也就是 2x2 方块的四点共享一个 UV。Y 左边切 8 个点的话,UV 是切 4 个点,那么如果 Y 切 7 个点的话,UV 要怎么切呢?7/2 = 3.5 没办法切啊,硬切的话就会出现奇怪的瑕疵。

我那时有提过,如果要左右 9+9 切到 702x576,用DVD2AVI 或 Avisynth 是不行的,要用TMPGEnc 才可以,因为 TMPGEnc 是以 RGB24处理,就没有这种奇数偶数的限制。用 Avisynth 切702,必须 8+10 这样两边都是偶数的组合才可以。一定要用Avisynth 切奇数点的话,切之前要先 ConvertToRGB24 才可以。

不知道是不是因为这个问题造成您说的黄线现象,您检查看看。

 

YUY2 切点的限制

宽度必须能被 2 整除。

高度 progressive 画面没有限制,interlaced 画面必须能被 2 整除。

 

YV12 切点的限制

宽度必须能被 2 整除。

高度 progressive 画面必须能被 2 整除,interlaced 画面必须能被 4 整除。

 

原因小弟以前在讲 chroma upsampling 的那篇帖子里面有提过,interlaced 画面的 chroma 分属两个不同的 field, 代码 (双击代码复制到粘贴板)YV12 progressiveuma   ChromaAABB  A BAABBCCDD   C DCCDDYV 12interlacedAABB   A B <- field 1CCDDAABB   C D <- field 2CCDD interlaced 画面如果切 2 会剩下 代码 (双击代码复制到粘贴板)AABB   A B <- field1CCDD Y 有 field 2 的 CCDD 的点,但是 UV 只剩下 field 1 的 A 和 B,CD 不见了。这样将来做chroma upsampling 的时候就会错误。所以 YV12 interlaced 画面一定要一次切 4 才可以。YUY2 的限制依此类推。

 

3. 用 GK 作 resize & crop 应该没什么问题吧,我想不出来要怎么讲

左右切边一定要在 resize 之前,上下切边可以同时一起作,或 resize 完之后再做也可以。基本上 GK 都会帮你做好正确的步骤,你只要选好之后直接用就可以了。

 

Doom9上最近有一篇写很好的参考可以看

https://forum.doom9.org/showthread.php?threadid=42708  引用 02-13-2003引用我用GK进行resize总有问题,能讲一下步骤嘛?

autocorp得到的尺寸总不标准  不要用auto crop,左右共切 16 点即可,如果上下有黑边,再把黑边删除。

新版的 GK 现在是以 702 为正确的比例,所以你切 16 点 -> 704 的时候 GK 会显示有 Aspect error,不用管它。如果你要切 702 也是可以,不过注意左边和右边切的点数都要是偶数,例如 10+8,这样才不会有奇怪的瑕疵。

切完左右之后比例就对了,再 resize 就可以。GK 产生的.avs 档自动会把 resize 排在 crop 的后面。画面上下有黑边的话,crop 左右的时候可以一起把上下的黑边切掉,这时 GK 会显示 Aspect error 有极大的错误,也不用管它,因为 GK 是假设画面没有黑边来算 Pixel Aspect Ratio 的,它不知道画面上有黑边,所以你现在把黑边切掉它会认为有错误,不用管它,反正只要一开始「有先左右切边」,就一定正确了。当然如果你会编辑 avs 档的话,也可以利用 GK 只切左右的点,产生 .avs 之后再自行打开编辑,在

crop 左 右

resize

 

之后再加上一行 crop,切掉上下的黑边,这样也可以。或是要把上下切边的步骤并入第一行左右切边的crop 里面一起作也可以。

应该不会很复杂? ^^;  引用 02-27-2003那个讨论是说,先补黑边再 resize,可以不用切掉原本的画面,还能维持正确的 PAR 比例。

例如讨论中 manono 所举的例子,NTSC 16:9 anamorphic 720x480,先上下各补 4 pixels 的黑边变成 720x488,再切掉下面 2 pixels,变成 720x486,再 resize 至 576x320。这样没有切到原本 720x480 的画面(最后是由 720x486 去 resize 的,比原本多出 6 pixels 的黑边,没有切到原本的画面),而且 PAR error 还是 0%。

manono写的 avs:

LoadPlugin("E:\DIVXST~1\GKnot\mpeg2dec.dll")

mpeg2source("D:\Wasabi\Wasabi.d2v")

AddBorders(0,4,0,4)

crop(0,0,720,486)

BicubicResize(576,320,0.333,0.333)

 

在 YUY2 模式下处理的话,垂直分辨率应该可以增加奇数的 pixels 吧?所以可以改成上下各加 3 pixels 变成 720x486 直接 resize -> 576x320,就不用多一步crop(0,0,720,486),把多余的 pixel 切掉的步骤了。

 

其实如果是 NTSC 16:9 anamorphic,根本不用先补什么黑边,如果不管水平分辨率要能被 32 整除的限制,720x480 直接resize 为 720x395 就是正确的比例(不过水平720 不能被 32 整除)。

什么?高度 395 不能被 16 整除?没关系,再多补黑边变成 720x400 就可以了。16:9 就是有这个好处,resize 正确以后要再多补多少黑边,或切掉多少画面都不会影响正确的比例。但是要注意播放的时候屏幕分辨率必须要设定为是 4:3 的比例,例如 640x480, 800x600, 1024x768... 等等。

举个例子,譬如说 resize 后 640x360 是正确的 16:9 比例,但是 360 不能被16 整除呀!没关系,不管是多补黑边变成 640x368 或切掉画面变成 640x352,在屏幕分辨率 640x480 的情况下播放,画面都不会变形。试想,宽度 640 和屏幕分辨率 640 相同,不用放大。宽度已经到顶了,垂直方向也不会放大,其中多补上去的黑边和屏幕的黑底相同,有效画面的范围仍然是 360。如果是切掉画面变成 352,等于上下损失 4 pixels,但是重直方向还是没有放大或缩小,只是有效画面的范围减小,所以画面还是没有变形。其它 4:3 的屏幕分辨率如 800x600, 1024x768... 也是一样,拿 800x600 来说,宽度 640 要放大 800/640 倍,高度也跟着放大 800/640 倍,多补的黑边还是黑底,切掉的画面也不会影响垂直方向的比例,画面还是不会变形。

所以 16:9 只要 Resize 正确以后,随便你上下怎么多补黑边或切掉黑边,都不会影响正确比例。

 

720x480直接 Resize 至 720x395 比例仍然正确,是新版 GKnot 的算法(以左右切边为 702 为正确比例,也就是 PAR 72/79 为正确比例)。旧版是以 704 为正确切边,也就是 PAR 10/11 为正确比例,算出来的分辨率不同。上面是以新版为准。

 

以前曾提过,NTSC D1 取样出来的分辨率其实是 720x486,因为 486 不能被 16 整除,所以切掉底部的 6 条扫瞄线,所以 NTSC DVD 上的分辨率是 720x480。对于 NTSC 4:3 的 DVD,如果我们先上下多补 6 pixels 的黑边,补成 720x486 再 resize,你会发现这时左右就不用切边到 702,只要切边到 711,从711x486 再 Resize 就是正确比例。详细的原理和计算法我就不再重述了。这样看起来好像不错,左右不用切那多,但是其实有利有弊。711x486 resize 虽然左右切边减少,但上下却多出 6 pixels 黑边,播放时放大到全屏幕上下多出黑边,可视范围还是减少。其二,如果是做 640x480 的影片,原本 702x480 resize 至 640x480,垂直方向一样是 480 不用 resize,等于只有做水平方向 resize,损失较小。711x486 -> 640x480,垂直 486 要变成 480,要做 resize,同时水平711->640 做 resize 效果不好,画面损失较大。所以我说有利有弊。

 

如果是 16:9 的影片,是可以考虑用先补黑边的方式来避免切边。

 

我个人是不太在意左右切边的问题,反正那些要切掉的画面就当作是多余的,切掉一点也不会心疼 :p

(那些边只是取样的时候多取样一点作为保险机制,切掉也没有什么损失,反正就当作是本来就不属于我的东西,没有也无所谓,这样安慰自己也许会释怀一点 :p ) 

 

 

 

 

引用 04-20-2003引用在gk里面应该以哪个为标准?

Aspecterror吗?如果是的话, 我按照我的dvd制式在gk(0.28beta 2)里面选择ntsc 4:3, Output resol'n 640x480, aspecterror = 0%, 它给的pixels left after cropping是 702x480

那宽度要先裁到702才合适,而不是704?

您问的问题小弟以前有写过说明,搜寻一下便可以找到。

切边后再 resize 是为了保持正确的比例,否则人物会变形。

你可以做不切边和切边的版本,两者互相比较,

便可以知道不切边会造成怎样的变形、比例会如何错误。

 

切边如果会切到画面,还是要把它切掉,不能保留。

觉得切到画面可惜的话,不妨这么想,这些要切掉的画面本来就是多余的,

本来就不该出现在 DVD 里,制作 DVD 的厂商只是取样的时候为了预防万一,

多取样一点作为保险,所以把这些本来就多余的画面切掉,一点也不可惜。

心理这样想的话也许就会好过一点  

 

事实上 DVD 的画面也是经过切过的,原始电影胶片上的画面更多,

胶片转到 DVD 上时切掉的东西更多,如果要追求完整画面,

恐怕得拿原始胶片来转才可以

所以可见画面的多寡不是重点,画面的比例是否正确,反而是更值得注意的焦点。

 

我再把原理和作法简单地说明一次,详细的说明,请参阅过去的讨论。

 

NTSC4:3 720x480 的 DVD,取样的宽高比为 11:10,

也就是取样时宽度比高度多取样 11/10 倍,

所以真正的有效宽度应该等于 480*11/10 = 704,而不是 720。

 

因此在 resize 至我们需要的 4:3 播放比例之前,要先左右切边共 16 点,

720x480切边-> 704x480 然后再 resize 至我们要的 4:3 比例

如 640x480/512x384... 等等。

 

取样宽高比 11:10 的 704x480,等于取样宽高比 1:1 的 640x480。

因为 704 多取样 11/10 倍,减回来704*10/11 = 640,便会得到 640x480。

所以 NTSC 4:3 720(704)x480 的 DVD,在不放大画面的情况下,

所能得到的最大分辨率,就是 640x480。

 

建议制作的时候不要放大画面,放大画面的工作交给播放时的显示卡来做就好了。

制作 640x480 还有一个好处,将桌面分辨率调成 640x480 播放,

就不用经过放大补点,画面会较锐利。

 

以上是以取样宽高比 11:10 来计算,会得到切边 704,如果以取样宽高比 79:72

来计算,便会得到要切边 702,才是正确比例。

旧版 GK 是以 704 为标准,新版 GK是以 702 为标准。

小弟觉得,要切 702 或 704 都可以,差距不会太大,看你觉得哪个方便。

 

以下以 16:9 的影片做范例,说明切边和 resize 流程

1. 本来 16:9 letterbox 应该是 720x480 切边 -> 704x360 resize-> 640x360

 

2. 为了 MPEG 压缩方便,高度要调整为可以被 16 整除的倍数,所以切边时故意

多留下 8 个 pixel 的黑边,变成704x368,368 可以被 16 整除。

 

3. 我选择把黑边集中在底部,8 个 pixel 刚好是一个 DCT 转换的方块单位大小。

 

4. 最后做 resize,704x368 -> 640x368

 

因时间不多,故无法再次详细说明,请见谅。  引用05-14-2003anamorphic 是指拍摄的时候,用变形镜头(anamorphic lens),水平挤压 33%,将 16:9 的宽银幕画面塞入4:3 的画面中,让画面上下没有黑边,充分利用完所有的有效画面,提高画面的信息量。

播放时再水平扩展 33%,回复原本的宽银幕画面。

图形请参考

https://www.thedigitalbits.com/articles/anamorphic/anamorphic185demo.html

 

要怎么知道 DVD 有没有 anamorphic?

各家厂商的标示不一样,请参考

https://www.thedigitalbits.com/articles/anamorphic/page2.html

 

往下拉看 "How Do I Know A DVD Is Anamorphic?" 这一段。

 

 

NTSCanamorphic

720x480切边->704x480 Resize-> 704x396(16:9)

396 不是 16 的倍数,补黑边-> 704x400

 

704x396是 NTSCanamorphic 在不放大的情形下,最大的分辨率。

 

如果要其它低的分辨率,一样是先切边-> 704x480 再 Resize 至其它 16:9 的分辨率。

720x480-> 704x480 -> 704x396/640x360/512x288...

 

有些电影不是 16:9,例如 2.35:1,这时anamorphic 上下会多出一点黑边,resize 后把黑边切掉即可。

图形请参考

https://www.thedigitalbits.com/articles/anamorphic/anamorphic235demo.html

 

 

PALanamorphic

720x576切边-> 704x576 Resize -> 704x396(16:9)

 

 

 

letterbox就是不做任何特殊处理,将 16:9 的画面直接放入 4:3 的画面中,当然上下会多出许多黑边没有利用到,有效画面缩小,相当可惜。

由于这种画面上下有很大的黑边,中间的缝隙才是有影像的部分,看起来很像是一个信箱投入口的样子,所以被称为 letterbox。

letterbox其实可以视为是一般的4:3 DVD,只是画面上下的区域,像素都是黑色的,所以它的处理方法和一般的 4:3 DVD 没有不同,只是多出了将上下黑边切除的动作。

 

 

NTSCletterbox

720x480切边->704x480 Resize-> 640x480(4:3) 切掉上下黑边->640x360(16:9)

360 不是 16 的倍数,补黑边-> 640x368

 

所谓补黑边,其实就是上下切的时候,多留下 8 pixels 的黑边,不是真的先切了再补 ^^;

720x480切边->704x480 Resize-> 640x480 切掉上下黑边-> 640x368

 

640x360是 NTSCletterbox 在不放大的情形下,最大的分辨率。

 

我们可以看出,letterbox 的最大分辨率比 anamorphic 要小。

这就是 anamorphic 的好处,分辨率高 ^_^

 

不过 anamorphic 的 DVD 在一般的 4:3 电视机上播放,因为要用 letterbox 的方式,

将画面塞进 4:3 的屏幕里面,只好每 4 条扫瞄线抽掉一条,480 *3/4 = 360。

这样会造成画面有锯齿,看起来不好看。

所以 anamorphic 的 DVD 在一般的 4:3 电视机上播放反而不好看。

(每 4 条扫瞄线抽掉一条,有许多做法,直接砍掉一条当然画质是最差的,

可以用其它 downsample 的计算方式去做,各家电视机硬件的设计不一样,

功力有差,出来的画质就不一样,有的不会锯齿得那么严重)

 

如果将 DVD 设定用 "Wide" 模式输出,这样看就没有锯齿,但是画面会变形,人物会被拉长。

有的日系的电视机有提供 "V 压缩" 垂直压缩的功能,会将扫瞄线收束,

集中扫瞄在屏幕中间的区域,这样就不用砍掉扫瞄线,这个播放画面非常细致,效果是最好的。

而在计算机上看则不会有这些问题  

 

关于 anamorphic DVD 在 4:3 电视机上显示的问题,可以看这里的图形,一目了然,很清楚 ^^

https://www.widescreen.org/widescreen.shtml

https://www.i70s.com/xl/dvd/dvd9.htm

 

 

切掉上下黑边的动作可以在 Resize 之前做

720x480切边->704x360 Resize-> 640x360 的结果和

720x480切边->704x480 Resize-> 640x480(4:3) 切掉上下黑边->640x360(16:9)

相同

 

因为上下左右同时切边后再 Resize

704x360-> 640x360 垂直一样,不用 Resize,等于只做水平 704 -> 640 的 Resize

 

而先切左右 Resize

704x480-> 640x480 垂直也一样,等于只做水平 704 -> 640 的 Resize

 

所以上下黑边先切后切都一样,垂直方向完全不受 Resize 影响。

 

如果要其它低的分辨率,一样是先切边-> 704x360 再 Resize 至其它 4:3 的分辨率。

720x480-> 704x360 -> 640x360/512x288...

 

有些电影不是 16:9,例如 2.35:1,这时上下会多出更多的黑边,把黑边切掉切到没有即可。

https://www.thedigitalbits.com/articles/anamorphic/anamorphic235demo.html

 

 

PALletterbox

720x576切边-> 704x576 Resize -> 704x528(4:3) 切掉上下黑边->704x396(16:9)

 

704x396是 PALletterbox 在不放大的情形下,最大的分辨率。

 

可以看出 PAL 的分辨率高于 NTSC。

 

 

 

以上有几点值得探讨

1. 相信大家一定会怀疑,PAL 的正确比例,切边应该是切 702,怎么我用 704?

 

因为用 704 可以得到较大的最大分辨率 704x528(4:3)/704x396(16:9),

如果你要压制分辨率比较高的影片,切边 704 可得到较大的分辨率。

但是会牺牲一点比例的正确性,画面会有点变形。

 

如果你不是要用最大分辨率,使用 702 的切边较好,比例才会正确。

720x576-> 702x576 -> 640x480/512x384...

720x576-> 702x576 -> 640x360/512x288...

 

 

2. 上面我们为了让 MPEG 压缩方便,多补了黑边,例如 640x360,补成 640x368,这样会不会造成画面变形?

 

在 4:3 的屏幕上看,不会。

 

当我们在 4:3 640x480 的屏幕上播放 640x360 16:9 的影片时,有影像的部分只有中间,上下是什么?是黑边  

所以当我们把 640x360 补黑边补成 640x368 时,只是先补了这 8 pixels 的黑边,这些黑边本来播放时自然就会有的,我们只是先补了、多压了这些黑边,所以一点也不会影响到播放时的画面比例。

 

其它 4:3 的屏幕分辨率 800x600/1024x768... 的情况依此类推,也是一样。

 

 

3. 为什么要补黑边,让长宽能被 16 整除?

 

因为 MPEG 是以 16x16 的像素大小为单位作压缩的,如果长宽不能被 16 整除,就无法得到整数个单位,这样会造成压缩的困难,会有许多瑕疵。

所以例如 TMPGEnc 等 MPEG 压缩软件一定要限制你的输出长宽可以被 16 整除。

然而 XviD 有 MPEG-4 的压缩工具,可以对付长宽非 16 倍数的大小。

所以用 XviD 压缩,长宽不一定要能被 16 整除。

但是考虑到压缩效率,似乎补成可以被 16 整除的大小较好。

但是这里面有许多复杂的因素... 因为补上去的黑边其像素值是 0,可能和其它像素的落差太大,使得包含黑边的压缩单位在寻找参考对象时,无法找到适当的匹配对象,这样也会造成压缩困难,甚至出现压缩瑕疵。

所以也有人建议,例如 sysKin,把所有的黑边都切掉,不要留下黑边。

 

我自己压缩的经验,还没有遇到过黑边会造成压缩瑕疵。

但是如果真的发生压缩瑕疵,我们只好不补黑边。

那么不能补黑边,又想维持能被 16 整除的话该怎么办呢?

这时只好多切一点画面,切到最接近的,能被 16 整除的数字。

例如 640x360,不能补黑边补成 640x368,只好多切一点,切成 640x352,牺牲一点有效画面。

 

 

4. 切成 640x352,画面会不会变形?

 

不会。

在 4:3 640x480 的屏幕上播放 640x352 16:9 的影片,有影像的部分高度是 352,并没有伸长或缩短,画面当然也不会变形。只是少掉了 8 pixels 的分辨率,变成黑边,少看了这 8 pixels 的画面。

 

其它 4:3 的屏幕分辨率 800x600/1024x768... 的情况依此类推,也是一样。

 

所以结论,正确 Resize 之后,随便你怎么切边,画面都不会变形,高兴的话,你要切成 640x16 都可以  

 

 

5. 左右切到 704/702 后,如果还是有黑边,可不可以多切一点?

 

可以,但是 Resize 之前切,计算很复杂,可以用 Gordian Knot 帮忙计算,不过我没有找到好的切边方法,能让比例正确。

Resize之后切,会比较方便。(Resize之后,可以任意切边)

 

 

6. 有些 DVD 标示影片比例是 2.35:1,但是 Resize 后切掉黑边,发现剩下来的影像比例并不是 2.35:1?

 

DVD 所标示的比例,不一定是真正的比例,影片的比例根据拍摄使用的方法、镜头不同,有许多不同的比例,还有导演和制作人可能随自己的喜好,改变放在 DVD 上的影片比例。标示 2.35:1 是取其最接近的近似值,实际上的比例可能是 2.40:1,或者窄一点,2.20:1,这是不一定的。

总之正确 Resize 之后,剩下的看到黑边就砍,比例一定是对的,不用担心。

请参考这篇文章的说明

https://www.chinaaudio.net/myyx/yxcs/dvd.htm

 

各种器材、拍摄方式,不同的比例

https://www.widescreen.org/aspect_ratios.shtml

 

2.40:1影片的范例

https://www.widescreen.org/examples/zorro/index.shtml

 

 

我手上有一个 PAL 的 Matrix 片段,720x576letterbox,

720x576-> 704x576 -> 704x528 切掉黑边之后-> 704x272(?!)

 

704x272,比例是2.58823529411764705882352941176471:1

 

我也不知道这是怎么回事  

不过看起来比例好像没问题   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

引用 08-08-2003alexheart 兄

 

是的,就是那些 704x480 的 .m2v

我正在做 Ending

英文版的对白和日文版的有一些不同,日初版的 Ending,YUNA 说的那句话是「谢谢你」,

而不是那么直接的「I love you」,我个人是比较喜欢日文版的对白,情感比较含蓄内敛,

但是反而更令人感到深重难过 T_T

 

这大概是东西方的文化不同

西方人大概会搞不懂那句谢谢您代表的意义,对他们来讲,可能太平淡了

 

这部动画非常难压,原因就是您说的那些,如果要压得小,

只好牺牲画质,或者是用其它低码率表现较好的 Codec 压缩。

如果要追求画质,只好不顾一切的压大一点。

我想要保持原质量,大概只能压到原本的 70% 左右,再下去细节减少,

同时压缩瑕疵会很明显。

网络上已经有很多版本,就是没有高质量版,所以我建议既然要做就做高质量版,

这样喜爱这部游戏,下载动画保存的人应该也会很开心地收藏

 

这部的比例是

704x480resize -> 640x480 把剩下来的黑边切掉每边各切 32 -> 576x416

 

虽然先切边到 702x480 再 resize 是正确比例

不过 702 不好处理,而且源文件已经切好 704,所以我想就算了用 704 就好

或者 702 的 YUNA 脸会比较胖,704会比较瘦,看你喜欢比较瘦的或是比较胖的

 

左右各切 32 切到 576,两边会有部分画面被切掉(总共 6 pixels),

之所以选 576 这个数字,是因为 576 才能被 32 整除,没办法。

如果不用切的,改成多留黑边到 608,这样不会损失画面,但是放大到整个画面观看时,

两边会有黑边,看起来不够痛快

能够填满整个屏幕,是这部做成 MPEG-4 保存的优势,不然看源文件就好,

已经有游戏的人就没有理由下载 MPEG-4。

所以几经考量,最后才选用 576x416 的分办率。

这部动画 DVD2AVI 的作者 jackei 做的时候,便是使用 576x416 的分辨率,

他做得非常棒,我想不出使用 MPEG-4 V2 Codec 压缩,能做赢的他的版本。

 

另外 .m2v 里面的 aspect_ratio 旗标是标 1:1,不过播放时不是用这个比例,

我猜 FFX 游戏程序在播放这些影片时会自己另外固定做 resize 到 4:3。

但是用一般的 MPEG 播放软件放并不知道要做 resize 到 4:3,

所以这些 .m2v 用一般播放软件播放画面会变形。

这样又多了一个理由做成 MPEG-4 收藏,为了正确的播放比例

 

您买的是国际亚版还是国际日版?国际日版有附一张特典 DVD,

里面有 RIKKI 的那首歌「SUTEKI DA NE」的 MTV,这个 MTV 中间有穿插游戏的CG 动画,

不过它的左右和上下没有切得像游戏里面那么多,分办率可以达到 608x448,

左右上下多出许多游戏里面切掉的部分,同时它的压缩瑕疵比较少,很适合拿来转档。

这个 MTV jackei 大神也有做,一样是做得可怕的棒,

我想不出用 MPEG-4 V2 可以压赢他的版本

 

请收 PM ^_^

 

 

想要保持质量,又想要压小一点,可以

1. 不要用 Avisynth 的 lanczos resize,改用 AviUtl 的 lanczos3 resize 外挂,

Avisynth的 lanczosresize 和 AviUtl 的比较,以Ending.m2v 为例,

1st-pass压出来档案大小差距是70MB。

 

2. 用 DVD2AVI/MPEG-2 VFAPIPlugin 解码,转到 RGB 上面做,一来可以隐藏压缩瑕疵

(这部源文件压缩瑕疵太重),二来可以缩小一点档案大小

 

 

另外这部是 30p 的讯源,30fps progressive 的讯源,每秒 30 张,

张张都没有交错,每一张都是要保留的画面,不可以做 30->24 的处理,

否则画面会顿,而且你会丢掉 1/5 的画面讯息。

计算器动画(CG)的作品通常都是 30p。  引用 08-19-2003如果不计文件大小的话,可以用

 

704x480削黑边-> 640x432 resize -> 640x474 再补黑边-> 640x480

 

因为

432 *79/72 = 474

 

比例完全正确,一点也不差。

这样是放大画面,但是水平可以保持 640 不变动。

和 576x416 相比,文件会大很多,清晰度会提升,但是线条的凝聚感会稍差。

有几个 clip 用这样做,感觉清晰度会提升许多。

 

FFX-2源文件已经先切好黑边,分辨率是 640x416,也可以

640x416补黑边-> 640x432 resize -> 640x474 再补黑边-> 640x480

 

alexheart兄请收 PM,需要您的意见   引用抱歉,太久没有上来。

 

画面比例的问题,那个 MPEG 文件中间插入 Squence Header,改变了画面分办率,你只要用能切割 MPEG 文件的软件,在分办率变更的地方,将原 MPEG 文件分为两段,分开解码,这样就可以了。

分段的地方很好辨认,通常是转场景的地方,在要分段之前,原始 MPEG 文件会有一张全黑的 frame,从那里一刀两断就好。

剪接的软件,我想大部分的软件都可以做到,我自己是用 MPEG-2 VFAPI Plugin 附的 mme.exe 切割的。

注意不要用 AVI/MPEG/ASF/WMV Splitter 这个软件切,我试过这个软件会忽略掉中途变更的 SEQ Header,直接用开头的 SEQ Header 取代,这对一般的 MPEG 文件没有影响,但是对这个文件,中途有变更 SEQ Header,直接套用开头的 SEQ Header 就会发生错误,有切等于没切。  引用 11-19-2003很简单,你只要用一个小工具,叫做 DVD2AVI,预览(Preview)一下

A. 如果 DVD2AVI 的 Statistics 状态区 Aspect Ratio 显示 4:3

代表讯源是 [4:3] or [16:9 letterbox = 4:3 上下是黑边]

1. 左右切边,NTSC 制左右共切 16 点,PAL 制左右共切 18 点

2.resize 至4:3 的分辨率,例如 640x480, 512x384, ...

3. 剩下的画面,如果还有多余的黑边,切掉

 

B. 如果 DVD2AVI 的 Aspect Ratio 显示 16:9

代表讯源是 16:9 anamorphic,你不用管他影片原始比例是 1.85:1,2.35:1, 2.40:1, ... 还是多少,不用去查数据,只要

1. 左右切边

2.resize 至16:9 的分辨率,例如 704x396, 640x360, ...

3. 如果有多余的黑边,切掉

 

就这样,简单明了吧   引用12-18-2003还好我做的影片都不需要面对这些观众或者遵守这些规定  

 

关于上下切边后影像会太细的问题,这点我倒是没有想过,不过原始 DVD 的比例就是这个样子,如果用 WinDVD 之类的软件去播放,WinDVD 没有左右切边,这点是错的,不过后面他也是 resize 到 16:9,用 Harry Potter II Trailer 做为例子,这个 Trailer 是 PAL 720x576,有横向压缩 anamorphic,也就是 Aspect Ratio 是 16:9,你用 WinDVD 播放,会发现它是 resize 到 16:9,上下留有黑边,然后放大到全屏幕。由于没有左右切边的关系,影像的部分更细。PowerDVD 也是一样。

拿到电视上播放,用硬件的 DVD player,硬件的 DVD player 做得非常正确,都会左右切边,然后也是 resize 到 16:9,上下一样留有黑边。

不信你可以用尺去量 WinDVD 和电视上影像部分的比例  

(注意电视因为有 overscan,上下左右都会有一部份扫瞄线我们看不到,要用专业的监视器才能看到全部的画面)

 

所以你在看 DVD 的时候,影像的部分就是这么的细,既然如此,做成 AVI 的时候也是这么细,这应该很正常,也很自然。

当然既然是做成 AVI 在计算机上看,只要 resize 正确,画面没有变形,其实随便要怎么切,依个人喜好,都没有关系。例如我就是不喜欢影像的部分这么细一条,这样太窄了,我要做成 2.35:1,这也没有关系,只是左右要多切一点边,牺牲一点有效画面。

 

不管怎么做都行,只要不要 resize 完全错误,画面整个变形,例如用 720x576 -> 切黑边 -> 640x272 这种乱来的做法,其它要怎么设定最终的分辨率,都随便您自己决定。

只要 resize 正确,要怎么切边都可以  

 

如果有人质疑你的做法,你就把正确的原理跟他说一遍,可以拿 GK, WinDVD, PowerDVD, 硬件 DVD player 做证据,让他心服口服  

 

 

引用 01-06-2004小嘴巴兄后来贴的那张图是 320x320,而第一帖 resize 后的图形也是 320x320,所以后来贴的那张图应该不是原图?

如果以后来贴的那张图来看,角落和边边的图形并不是高频,如 stevenxu 兄说的,应该要保留。

 

假设小嘴巴兄用的原图是我以前贴的 640x640 的图,那么 filter 效果最好的是图 7  

 

CZP 图形是由多个同心圆所组成,越往外圈越密集,一开始是有多个黑色的 pixel 组成一个宽宽的黑圈,然后有多个白色的 pixel 组成白圈,这样一环一环由内而外延伸出去,越往外圈,圈的宽度越窄,到最后几乎是一个黑色的 pixel 接一个白色的 pixel,圈由宽带变成一条细线,这样子我们称为这里具有很高的「空间频率」,一黑一白、一黑一白,变化的频率很快。

 

由中心往左右延伸出去,圈越来越密集,我们说这样是「水平空间频率」越来越高,由中心往上下延伸出去,圈越来越密集,我们说这样是「垂直空间频率」越来越高。

 

产生的基本图形像下面这样(1/4 圈):

 

 

当我们缩小画面的时候,譬如说由 256x256 变成 128x128,我们知道「分辨率」变小了,原本 256x256 画面有很密集,变化很快,空间频率很高的成分,在新的 128x128 这样少数的 pixel 上表现不出来,「分辨」不出来。学术的讲法就是,取样间距变宽,取样点不足,取样频率不够,无法记录取样频率一半以上的高频。这些高频的成分在缩小后的图形会变成以低频的形式出现,造成画面上出现许多原来没有的图形,这个瑕疵我们称为 aliasing,好像有翻译翻为「假频」。

 

下面是用 "Nearest neighbor" resize 法缩小上面的图形,由 256x256 -> 128x128,我们可以看到角落多出许多原本没有的圆圈:

 

 

如果我们在 resize 之前先用一个低通滤波器,Low pass filter,把画面上 resize 后不能呈现的高频先把它滤除掉,这样就可以避免 aliasing 的现象。

所以缩小的算法,在 resize 之前,必须先用一个 LPF 对画面做滤波处理。

 

下面是我们将上图先用一个 3x3 的 Gaussian filter 做处理,把高频滤掉,然后再缩小的图形:

 

 

可以看到 aliasing 的现象变得比较好了。

如果我们用 Adaptive box filter 做滤波:

 

 

多出来的圆圈几乎都不见了。

不过滤得越干净,通常也代表画面越模糊。  引用01-06-2004为了更仔细的观察 LPF 滤波的特性,我们把 CZP 的图形弄得更复杂一点,像下面这样:

 

 

这张图就是我以前贴的图形,不过我以前是用 640x640,现在是 640x480,我没有调整为正圆,有一点丑,cynix 兄做的图比较漂亮  

这个图形的角落和边边有许多「网格状」的灰色圆圈,圆圈的中间看起来是一个宽带,但是其实它是由许多个黑白交错的 pixel 所组成,是频率非常高的地方,这里包含了高频和低频的成分,非常复杂。

现在我们用 bicubic 三次补间的 resize 方法,如果没有用任何 pre-filter 先做处理,直接 resize: 640x480->320x240

 

 

当然,会多出一堆圆圈圈。

 

然后我们试验先对画面做 filter,因为我们 resize 是做 640x480->320x240,垂直和水平方向两边都要动到,所以两边都要滤波,首先是水平滤波:

图因为太大了,就不放了,节省频宽,大家自行想象  

 

会留下垂直高频的成分。

然后垂直滤波。滤掉垂直水平高频的成分之后,图形变成下面这样:

 

 

看起来不错,大部分高频都滤掉了。

接着 resize:

 

 

很漂亮吧,这个 filter 非常精准,切得非常非常精准,把高低频一刀两断,把高频的成分滤掉,保留大部分我们可以看到的粗粗的圆圈(低频)。

上面我们是用质量非常高,cut off 非常精准,也就是 tap 数非常高的 filter,上面是 15-tap 的filter。

如果是用 4-tap 的 filter 会怎么样?

4-tap的话是下面这样:

 

 

我们可以看到效果差了很多,边边 1/4 的位置已经出现"假的"圆圈。  引用01-06-2004那么我们常用的 lanczos3 resize 的特性是怎么样呢?

是下面这个样子:

 

 

边边的低频还是有保留,同时频率的遮蔽特性也相当不错,只是好像不如上面的 15-tap filter 保留得多?

其实上面 15-tap 这么高阶的 filter 会有一个很大的问题,叫做 ringing,也许看 CZP 的图形看不出来,我们用一个大家很熟悉又很容易看的图形「Colorbar」来做示范。

640x480的 Colorbar-> 320x240:

 

640x480的 Colorbar-> 15-tap LPF -> 320x240:

 

注意看色彩条边界的部分,看到了吗,15-tap 的 LPF 会出现像鬼影一般的透明白边,这种情况在一些 DVD 上也有看到,因为他们加了过度的锐利化 filter。

 

所以我们有一个两难,如果这个 LPF 的 tap 数太高,会产生ringing 的瑕疵,如果这个 filter 的 tap 数太低,又没有办法很有效的滤除高频。

所以我们的 filter 必须慎选,刚刚好是可以滤除大部分的高频,又不会产生太严重的ringing。

这个刚刚好的 tap 数,会随着你缩小的比例而变化,例如上面是 640x480 ->320x240,垂直水平缩小一半,4-tap 可能是一个不错的选择;如果换成是做 640x480 -> 576x384,那么最适当的系数又会改变。

Avisynth的 bicubicresize 有 b/c 两个参数,可以让你调整"ring" 的程度。

 

所以我们以前说 lanczos3 resize 有一个好处,就是它的算法刚好自身等于是一个会依resize 程度作调整的 LPF,它的 LPF 特性是最佳的,所以 lanczos3 resize 有非常好的质量,画面清晰又不会太过份锐利,是很好的resize 法。

 

当然我们也可以依需要换不同的选择,例如要压低码率,需要很糊的画面比较好压,那么 bilinear resize 可能是不错的选择。如果画面特性,filter 高阶并不会造成明显的 ringing(没有锐利的文字线条),那么用 bicubic resize,调整成非常锐利清晰的 resize 参数,也可能很不错。

如果我们要缩小的程度很小,例如 704x480 -> 640x480,垂直方向根本没动,水平 704-> 640,也许可以不必用任何 filter,直接 resize。跟它拼拼看、赌赌看,如果画面特性,刚好没有那么高的高频,那么不经过filter 就 resize 也不会造成明显的aliasing,这样速度快,而且画面不会模糊。

trbarry写的SimpleResize 就是基于这个想法而设计的,SimpleResize 没有用 pre-filter,直接 2-tap 的 linear interpolation,线性内插做 resize,速度很快。

 

所以最佳的 resizer 会视情况、需要而定,不过通常的情况下,lanczos3 会是相当好的选择  

 

因为事务繁忙,小弟没有办法作很详细的说明,请「真正的」大鱼们帮忙补充,小鱼儿要溜了   


 
评论
 
回到顶部