Resize

上一篇 / 下一篇  2007-07-27 15:43:22 / 个人分类:Codec

51Testing软件测试网z]n!}2|? oa2Z(AU

    Rresize 的错误一般看不出来,如同我上面转贴的那个问答中所讲的: Fortunately, even if you had used wrong methods for scaling/resampling the image, the difference between the correct aspect ratio and a wrong aspect ratio is often small 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): PAL 4: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 整除。 PAL 16: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),所以影像在计算机上看是变形的。 由于横轴的取样间距短,取样次数较频繁,所以取样出来的点比较多。 NTSC PAR 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,规格是 PAR 1: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:1 768x576(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 上也讨论过好多次,有兴趣者可以自行查阅,或是参考下列两个网址 http://www.mir.com/DMG/aspect.html http://www.lurkertech.com/lg/pixelaspect.html 能看繁体中文的话,请看 DVD2AVI 的作者 jackei 的解说 http://bbs.irradiance.net/txtVersion/boards/animation/M.982241028.A/PostThreadList.html http://bbs.irradiance.net/txtVersion/boards/animation/M.1022228442.A/PostThreadList.html 然而也许有人会注意到,根据这个网页 http://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" 的 square pixel 的取样频率,来求得 NTSC 和 PAL 的 PAR。但是实际上这些 "industry standard" 的取样频率, 取样出来的仍然不是 1:1 的 square pixel,只是很接近 square pixel,所以直接这样除, 得到的 PAR 并不精确。 精确的计算方法: 625/50 PAL 每一条扫瞄线的取样时间为 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.94 NTSC 每一条扫瞄线的取样时间为 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,得到的结果就是 NTSC 72/79,PAL 128/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 更好。

X2]]`,M0t1o*{S0

@8]A_s)Dza H R7Z_2X0 

]8`MU"A051Testing软件测试网Sam2YpG

Fromhttp://www.5jia1.com/personal/blog/view.php?member_id=203744&blog_id=72396551Testing软件测试网5~_m4uW_


相关阅读:

TAG: Codec

 

评分:0

我来说两句

Open Toolbar