2015年7月9日 星期四

H.264 Frame



H.264 Frame

影片是由許多連續的 Frames 所組成,但並不是所有 Frames 都是完整的畫面,那些 Frames 需要參考其他 Frames 才能解碼出一張完整的畫面。

H.264 的 Frame types 有 I、B、P 三種。

I-frame:
不需要參考其他 Frames,是一張完整的畫面。

I-frame (IDR):
不需要參考其他 Frames,是一張完整的畫面。
IDR frame 為真正的 關鍵畫格 (keyframes),
P-frame & B-frame 不會越過 IDR frame 去參考其他 Frames,
所以可以隨意跳轉到任意 IDR frame 開始播放/解碼,而不會發生問題。

P-frame:
只紀錄了與之前的 Frames 相異的區塊,最多可以參考 "16 張" 之前的 Frames
播放/解碼時需要參用到之前的 Frames 的部分資料,才能解碼出完整畫面。
在 x264 中,你不能控制 P-frame 數量,但你可以控制一個 P-frame 所能參考的 Frame 數量,
也就是 Reference frame (ref) 的數值。

B-frame:
只紀錄了與前一張與後一張的 Frames 相異的區塊,壓縮率高(由其是在低動態/低變化的影片),
播放/解碼時需要用到前後兩張的 Frames 的部分資料,才能解碼出完整畫面。

由於 P-/B-frame 不是完整的畫面,解碼時必須參考其他 Frames,
所以你不能隨意跳轉到 P-/B-frame 上播放/解碼。
也就是說你如果播放 MPEG 視訊格式,當你跳播放時間點時,
正常而言,並不會跳到你所選的時間點上,而是最近的 IDR / I-frame。

由以上得知,在 bitrate 充足的情況下,則不需要使用較多 B-frame、Reference frame (ref) ,
多少 bitrate 為充足依影片內容為定,高動態影片需要較多 bitrate,低動則較少。

至於使用時機...
提高 B-frame/ref 使用量可以降低 bitrate 的需求,使用較少 bitrate 達到目標品質。
低動態的影片可以使用較多的 B-frame,高動態或是純靜態則是 P-frame 效果較好。

對於相容性與硬體負擔...
提高 B-frame/ref 使用量的副作用是降相容性以及提高硬體負擔,請先保證相容性再來追求壓縮率。
而 ref 的副作用要比 B-frame 強,例如 ref=16 這代表解碼一個 P-frame 必須要連跳回 1~16 張之前的 Frames 取用資料。

沒有留言:

張貼留言