引用:
Originally posted by snic
請問這判斷法則是針對轉dvd或svcd的mpeg-2還是vcd的mpeg-1 ?
因為有人建議一般不要修改GOP結構...
以取得壓縮比例和圖像質量之間的最好平衡。
改了會比較好嗎?
|
我是回答用在 DVD 的製作上,半秒鐘的 GOP 長度是一般的建議。
因為 P-Frame 參照前一個畫面壓縮會累積誤差,GOP 拉太長畫質會劣化,還有考慮到要能隨機跳躍到不同段落的彈性,所以建議為半秒鐘。
在中高流量的時候,這樣的 GOP 長度壓出來品質最好。
然而在 VCD/SVCD 上,我覺得這些規格流量都不太夠用,此時拉長 GOP 的長度,減少佔用最多流量的 I-Frame 出現的頻率,可能對畫質有幫助。不過實際情況很複雜,是否真的有明顯的助益還是要視訊源的特性而定。例如有些動畫,它的動態變化週期差不多就是半秒,在這種情況下即使你拉長 GOP,譬如說由 M=12 拉長到 M=15
IBBPBBPBBPBB IBBPBB...
IBBPBBPBBPBB PBBIBB...
原本的第二個 I 的位置變成 P,但是剛好這個位置是畫面變化拉大的位置,和前一張參考畫面 P 的差距開始變大,這樣即使這張畫面改成 P 壓縮,大部分的方塊還是以 intra-block 壓縮(獨立壓縮,不參考其他畫面,I-Frame 全部都用這種方式壓縮),所以壓出來的 Frame 大小和 I-Frame 差不多大,甚至更大,那麼拉長 GOP 就沒有意義了。但是這個情況很複雜,I/P/B 彼此之間的牽動關係很難估計,所以最好的方法就是每部影片多壓幾次,試試看哪一種組合最好。
就直覺思考來說,低流量時拉長 GOP 應該是有幫助的。
我還可以提供一些建議,不過這些建議一般大概都不會用,因為太累了 :P
可以確定的是,B-Frame 的壓縮率最高,當畫面變化的幅度很小的時候,可以增加 B 的個數(手動指定)。這個個數我記得有一個限制,不能無限長,多少我忘了,建議不要超過 4。注意一定是要畫面變化很小的時候才能增加 B 的個數,否則你會壓出超大的怪物,例如日本的某個 @MAD 動畫,一分鐘左右 320x240 壓了一百多 MB,B 的個數我記得好像全部是 8 ^^;。當畫面完全靜止時,或是差距實在太小太小,可以手動指定這些靜態畫面為 Copy Frame,可以省下很多 bit。TMPGEnc 還可以手動指定某個 GOP 的 bitrate,甚至中途改量化矩陣(不過要增加紀錄更改的量化矩陣的資訊,插入一個 Sequence Header,有點划不來)。
還有一般我們會用 Detect Scene change 功能,偵測場景切換,在切換的地方自動插入 I-Frame,開始一個新的 Closed GOP,這樣可以增進畫質。有一篇研究報告說,在低流量的 VCD,這些插入的 I 會打斷前面的 GOP,如果插入的次數很頻繁,會使壓縮效率下降。(但是不插也不行,壓縮效率也會下降)所以他們設計了一個方法,當 Scene change 插入一個新的 GOP 之後,這個 GOP 和後面接的 GOP 可以動態的拉長做補償,使得最後整體 I 的出現次數還是和原來沒有使用 Scene change 時一樣。
舉例說明
GOP # Picture coding types (bitstream order / display order):
: :
: :
13 IBBPBBPBBPBB / BBIBBPBBPBBP
14 IBBPBBPBBPBB / BBIBBPBBPBBP
15 IBBPBBPBB / BBIBBPBBP
16 IBBPBBPBBPBBPBB / BBIBBPBBPBBPBBP
17 IBBPBBPBBPBB / BBIBBPBBPBBP
18 IBBPBBPBBPBB / BBIBBPBBPBBP
19 IBBPBBPBBPBB / BBIBBPBBPBBP
: :
: :
我們可以看到編號 15 的 GOP 被打斷,下一個編號 16 的 GOP 是 Scene change。
(這個例子中並沒有使用 Closed GOP)
本來 M = 12,被打斷之後編號 15 的 GOP 變成只有 M= 9,所以我們就在插入的 Scene change 的 GOP 補償,把這個 GOP(編號 16)拉長為 M = 15,補回上一個減少掉的長度。
這樣最後壓出來,總共的 I-Frame 的個數還是和原來一樣,沒有增加,又可以在 Scene change 的地方插入 I-Frame,可以說是兩面兼顧 ^_^
如果被砍斷的 GOP 砍掉的 Frame 比較多,譬如才剛剛 IBB 跑了三個 Frame 就被砍斷,這樣要補的 Frame 集中在下一個 GOP 補償,會把下一個 GOP 拉得太長,畫質恐會劣化,那麼我們就可以分配要補償的 Frame 數給下下一個 GOP,後面接的 GOP 一起幫忙分擔,作法可以有彈性。
據實驗,這樣搞畫質(以 PSNR 計算)增加蠻多的(多少我忘了 ^^;)。
呃... 以上這些建議對大家可能都沒有幫助,因為長篇的東西這樣搞太累了... ^^;;;;