PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   DVD 討論區 (https://www.pcdvd.com.tw/forumdisplay.php?f=5)
-   -   請問如何resize成正確比例... (https://www.pcdvd.com.tw/showthread.php?t=114425)

silentlain 2002-11-28 08:28 PM

感謝您的回應:)
經過您反覆的解說之後,我終於知道要怎樣resize才是正確的了
但我現在還有一個疑問
在您的文章中和一些前輩的文章中都有提到影像解析度的寬和高要是多少多少的倍數才行(有人說8,有人說16,眾說紛紜)
請問一下這個的依據是什麼??
是哪一部規格定出來的??
在哪邊可以找到相關資料??
再次感謝您的回應,謝謝~~~

mycai 2002-11-28 10:58 PM

引用:
Originally posted by silentlain
在您的文章中和一些前輩的文章中都有提到影像解析度的寬和高要是多少多少的倍數才行(有人說8,有人說16,眾說紛紜)
請問一下這個的依據是什麼??

原本是mpeg2是以16x16為單位編碼的,所以必須是16的倍數。
不過一些後來的編碼有對這點改進,記得像mpeg4是8的倍數即可。
目前普遍的Divx之類的我就沒去注意了,反正限制該是愈來愈少。
不過以mpeg4來說,當不是16倍數時效率較差;
其它對於顯示卡作全螢幕之類的放大運算也有影響,
建議能用16的倍數就儘可能用16的倍數吧。

art46 2002-11-28 11:36 PM


這裡高手雲集耶
看來可以獲益非凡喔
謝謝大家的討論
讓我偷學到好多喔

silentlain 2002-11-29 12:14 AM

引用:
Originally posted by mycai

原本是mpeg2是以16x16為單位編碼的,所以必須是16的倍數。
不過一些後來的編碼有對這點改進,記得像mpeg4是8的倍數即可。
目前普遍的Divx之類的我就沒去注意了,反正限制該是愈來愈少。
不過以mpeg4來說,當不是16倍數時效率較差;
其它對於顯示卡作全螢幕之類的放大運算也有影響,
建議能用16的倍數就儘可能用16的倍數吧。

您這裡所指的MPEG2的16*16是不是指的是它的Macroblock的大小是16*16的原因呢??
那後來MPEG4的marcoblock是因為變成了8*8所以才是8的倍數嗎??
再次感謝您的回應
:agree:

Shade 2003-01-02 03:13 AM

引用:
Originally posted by silentlain

您這裡所指的MPEG2的16*16是不是指的是它的Macroblock的大小是16*16的原因呢??
那後來MPEG4的marcoblock是因為變成了8*8所以才是8的倍數嗎??
再次感謝您的回應
:agree:

MPEG-4 的 Macroblock 一樣是 16x16,不過有 4MV mode,也就是 inter4v 模式,16x16 中的 4 個 blocks 可以各自尋找最接近的參考方塊,記錄四個 MV,encoder 壓縮時會判斷要用哪種模式壓縮。4MV 只會用在順向預測。
對於非 16 整數倍的大小,MPEG-4 有提供 tool 解決這個問題,不過不一定每個 encoder 都會實作,所以最保險的方法,還是事先做好可以被 16 整除的大小。
水平長度最好能被 32 整除,有些顯示卡遇到水平長度不是 32 的倍數時無法啟動 Overlay。

Shade 2003-01-02 04:08 AM

關於正確的 resize,最近在研究 PAL,所以去對岸找資料,順便轉一些文章過來,也許有用。大家不用擔心版權的問題,因為作者 Silky 絕對不會有異議(咳咳.. ^^;)
部分用語是對岸的說法,文章可能不太通順,大家將就一下。
轉貼開始
=======================================
這些是 DVD2AVI 的作者 jackei 研究出來的,如果有錯,也是我的理解有誤,和 DVD2AVI 的作者無關。

為什麼直接 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 的比例。

Shade 2003-01-02 04:10 AM

根據 CCIR601(ITU-R BT.601),類比影像轉為數位時(由電影膠片轉為數位格式,如 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 ...。

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)

其他詳細資料,可以參考以下兩個網址:
http://www.mir.com/DMG/aspect.html
http://www.lurkertech.com/lg/pixelaspect.html

或者是看 DVD2AVI 的作者 jackei 詳盡的解說:
http://bbs.irradiance.net/txtVersio...ThreadList.html
http://bbs.irradiance.net/txtVersio...ThreadList.html

Shade 2003-01-02 04:11 AM

然而也許有人會注意到,根據這個網頁
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" square pixel 的取樣頻率,
取樣出來的仍然不是 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。

ps. 640x480 是 648x486 截邊的結果,因為這樣比較好處理(16 的整數倍)。

所以根據正確的紀錄時間(PAL 52μs/NTSC 52+2/3μs)來推算 PAR,得到的結果就是
NTSC 13.5/(12 + 24/79) = 79/72 (y/x),PAL 13.5/(14 + 10/13) = 117/128 (y/x)

頭開始痛了嗎? ^^;
本來我們都已經習慣左右截邊 -> 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 更好?

Shade 2003-01-02 04:13 AM

用 GKnot 算的幾組正確的比例(GKnot 的作者因為有 jackei 大大告訴他正確的作法,
所以變成是唯一能算正確比例的軟體,要勾選 Option 設定底下的 "Follow ITU-R BT.601 Standard"
GKnot 便可以遵照 ITU-R BT.601 的建議,做正確的 resize)

調整時要讓 GKnot 的 Aspect Error 這個項目顯示的百分比為 0%,水平解析度必須能被 32 整除,
垂直解析度必須能被 16 整除。

NTSC 4:3
720x480 -> 704x480 -> 640x480 /Aspect Ratio 1.333(4:3), Aspect Error 0%
720x480 -> 704x480 -> 576x432 /Aspect Ratio 1.333(4:3), Aspect Error 0%
720x480 -> 704x480 -> 512x384 /Aspect Ratio 1.333(4:3), Aspect Error 0%
720x480 -> 704x480 -> 448x336 /Aspect Ratio 1.333(4:3), Aspect Error 0%
720x480 -> 704x480 -> 384x288 /Aspect Ratio 1.333(4:3), Aspect Error 0%
720x480 -> 704x480 -> 320x240 /Aspect Ratio 1.333(4:3), Aspect Error 0%
.....

如果電影比例大於 4:3,上下會多出黑邊,此時就把黑邊削掉就好,
只要注意高度必須能被 16 整除。

NTSC 16:9(anamorphic)
720x480 -> 704x480 -> 704x396 /Aspect Ratio 1.778(16:9), Aspect Error 0%

注意高度 396 不能被 16 整除,所以 resize 完以後,要上下多補 2 個 pixel 的黑邊,
補成 704x400 再送進去壓縮。

720x480 -> 704x480 -> 640x360 /Aspect Ratio 1.778(16:9), Aspect Error 0%
360 -> 368
720x480 -> 704x480 -> 576x324 /Aspect Ratio 1.778(16:9), Aspect Error 0%
324 -> 336
720x480 -> 704x480 -> 512x288 /Aspect Ratio 1.778(16:9), Aspect Error 0%
720x480 -> 704x480 -> 480x270 /Aspect Ratio 1.778(16:9), Aspect Error 0%
270 -> 272
720x480 -> 704x480 -> 448x252 /Aspect Ratio 1.778(16:9), Aspect Error 0%
252 -> 256
720x480 -> 704x480 -> 384x216 /Aspect Ratio 1.778(16:9), Aspect Error 0%
216 -> 224
.....

其他還有很多組可以自行利用 GKnot 計算。
(算 16:9(anamorphic) 的時候先把 H-Modul = 16(高度必須能被 16 整除的限制)改成 1,
這樣的彈性比較大,會有比較多組可以選擇,等算好 resize 後的大小後,如果高度不能被 16 整除,
再自行考慮要多補,或者是削掉多少黑邊)
=======================================
轉貼完畢

Shade 2003-01-05 07:39 AM

補充

===========================
請講解工具使用,舉一個實例。

-----------------------------------

工具有很多,例如 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 整除,
如果上下有多餘的黑邊再把黑邊削掉即可,

例如:

NTSC 16:9(anamorphic) 原始解析度 720x480
DVD2AVI Clip 削邊為 704x480 存成 .d2v。
或是 MPEG2DEC.DLL 利用 Avisynth 的 Crop
# Crop(clip, int left, int top, int width, int height)
Crop(8,0,704,480)

附帶一提,Avisynth 說明檔中也有下面這個範例,大家可以找出來看看:
Crop crops excess pixels off of each frame. If your source video has 720x480 resolution,
and you 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:
Expand frame and letterbox image
Frame width : 704
Frame height : 400
Fill color : 選黑色

AviUtl 有另外的 plug-in 可以做填黑,處理的優先順位要調到 resize 之後,
相信會用的人自然知道,不用小弟多言。

TMPGEnc ..等,也是一樣的作法,做完以後再壓縮就可以了。

至於幾個正確的解析度,前面已經有算好了,直接拿來用就可以了。
如果不要用 702,想用 704,將前面那些算好的數字 702 改為 704 即可。
想用其他解析度可以用 Gordian Knot 幫忙算。

我剛剛才發現,新出的 Gordian Knot 0.27 版已經改為使用那個網頁上的計算方法,
以 702 為正確的切邊數字。現在 NTSC 用 704 會顯示是錯誤的 Aspect Ratio,
和 PAL 一樣,要用 702 才會得到正確的結果... 真麻煩啊,NTSC 我還是想用 704 耶...

希望這樣補充可以幫得上忙。


所有的時間均為GMT +8。 現在的時間是02:37 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。