名詞介紹
Width: 寬度,即橫軸像素數量
Height: 高度,即縱軸像素數量
Display Aspect Ratio (DAR) : 顯示比例
Pixel Aspect Ratio (PAR): 像素比例
Sample Aspect Ratio (SAR): 取樣比例 等同 PAR
Source Aspect Ratio (SAR): 原始比例 即 Width/Height
DAR = Width / Height * PAR
請注意: 一般說的 "Aspect (比例)" 指的是 "DAR (顯示比例)"
DAR 才是 播放時正確的比例
Wiki: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

DAR = 8 / 8 * 1 / 1 = 1:1

DAR = 4 / 8 * 2 / 1 = 1:1
--------------------------------
常見標準比例為 4:3, 16:9, 2.39:1 (近代電影)
2.35:1 是舊的電影標準比例,目前稱呼為 2.35:1 的電影實際上是 2.39:1
或是 Resize 後的誤差使之接近 2.35:1
而影片的 PAR 通常為 1:1 (正方形像素)
部分影片的 並不是正方形像素
例如 解析度為 1440x1080 [PAR 4:3, DAR 16:9] (某些 HDTV 就是使用此規格)
非正方形象素可以節省大量資料量,以及降低播放端需求
‧ 影片1: 1920x1080 [PAR 1:1, DAR 16:9] 像素數量 (畫素): 2073600
‧ 影片2: 1440x1080 [PAR 4:3, DAR 16:9] 像素數量 (畫素): 1555200
如果顯示器是1920x1080, PAR 1:1 (正方形像素,PC 標準)
因為螢幕是正方形像素,則播放影片2時會以 1920x1080 輸出以保持 DAR 為16:9
如果直接輸出為 1440x1080, 會得到錯誤 DAR = 1440 / 1080 * 1 / 1 = 4:3,
原因可能是設定錯誤,或是播放器不認得 PAR 4:3
--------------------------------
常見的影片標準解析度與顯示比例:
規格 - 名稱
‧ 3840x2160 [PAR 1:1, DAR 16:9] - UHD, 4K
‧ 1920x1080 [PAR 1:1, DAR 16:9] - Full HD, HD 1080
‧ 1440x1080 [PAR 4:3, DAR 16:9] - HD 1080
‧ 1280x720 [PAR 1:1, DAR 16:9] - HD 720
‧ 720x480 [PAR 40:33, DAR 20:11] - Full D1 NTSC 16:9
‧ 720x480 [PAR 10:11, DAR 45:33] - Full D1 NTSC 4:3
‧ 720x576 [PAR 16:11, DAR 20:11] - Full D1 PAL 16:9
‧ 720x576 [PAR 12:11, DAR 45:33] - Full D1 PAL 4:3
‧ 704x480 [PAR 40:33, DAR 16:9] - D1 NTSC 16:9
‧ 704x480 [PAR 10:11, DAR 4:3] - D1 NTSC 4:3
‧ 704x576 [PAR 16:11, DAR 16:9] - D1 PAL 16:9
‧ 704x576 [PAR 12:11, DAR 4:3] - D1 PAL 4:3
由以上可得知,處理 Full D1 片源時
必須左右各裁切8像素寬度,才可以得到正確的 16:9 或 4:3
(720 - 8 * 2) / 480 * 40 / 33 = 16:9
--------------------------------

維持顯示比例不變或接近,基本上誤差不要太大即可
令 InDAR ~= ScaleDAR = ScaleWidth * ScaleHeight * OutPAR
ScaleWidth = CustomScaleHeight / CustomPAR * InDAR
ScaleHeight = CustomScaleWidth * CustomPAR / InDAR
※ 此處InDAR 指的是縮放之前的 DAR,不是片源的 DAR。
片源若為 1440x1080 [PAR 4:3, DAR 16:9],上下裁切各 140 像素高度
裁切後的 DAR:
CutDAR = 1440 / (1080 - 140 * 2) * 4 / 3 = 2.4
若要將解析度寬縮放到 1280 (正方形像素):
ScaleHeight = 1280 / 2.4 = 533.333... 取最接近的偶數 534
所以輸出為 1280x534 (PAR 1:1) 能維持DAR與輸入近似
--------------------------------
當某些輸入影片其實本身顯示比例就有誤差或是錯誤
這時你可以代入你認為正確的顯示比例來計算
例如 常見的將 16:9 片源 被轉成 848x480 (PAR 1:1), DAR = 848/480*1/1 ~= 1.76666:1
如果你為了相容較低階設備,需要再降解析度到 640x480 (PAR 1:1)以下,
計算時把它的 DAR 當作 16/9 即可
ScaleHeight = 640 * 9 / 16 = 360
所以輸出設定為 640x360 (PAR 1:1)
--------------------------------
mod16, mod8, mod4, mod2
NewNum = Fix(Num / Modulus + 0.5) * Modulus
函數 Fix 功能為取整數(直接捨棄小數)
Fix(1.6) = 1
所以 Fix(Num + 0.5) 為 Num 的小數第一位四捨五入
Fix(1.6 + 0.5) = Fix(2.1) = 2
寬與高並非只要是正整數都可以
通常為 mod16 x mod8
Ex. 1280x533 修正為 mod16 x mod8
Width = Fix(1280 / 16 + 0.5) * 16 ~= Fix(80.5) * 16 = 80 * 16 = 1280
Height = Fix(533 / 8 + 0.5) * 8 ~= Fix(67.125) * 8 = 67 * 8 = 536
--------------------------------
誤差計算方式
DAR_Error = (InDAR - OutDAR) / InDAR * 100%
所以縮放後造成的顯示比例誤差為
DAR_Error = (InDAR - ScaleDAR) / InDAR * 100%
誤差控制在 -1% ~ +1% 內即可
※ 計算縮放後造成的顯示比例誤差 InDAR 帶入縮放之前的 DAR,不是片源的 DAR。
Ex.
片源: DAR 16:9
→ 裁黑邊後: DAR 2.39:1
輸出: 1280x536, PAR 1:1
OutDAR = 1280 / 536 * 1 / 1 ~= 2.338
DAR_Error ~= (2.39 - 2.338) / 2.39 * 100% ~= 0.08%