2010-12-11 76 views
4

假設我有一個非常非常少的場景變化很長時間(幾分鐘到幾小時)的視頻流,而且我正在使用類似FFmpeg將原始視頻轉碼爲h.264,我可以使用哪些設置來利用超級冗餘?激進的h.264壓縮設置專門用於場景變化很小的很長場景

是否將設置的最小關鍵幀間隔設置爲最大值(無論那是簡單的)?

在h.264規範中是否有空間來增強FFmpeg以進一步利用很長一段時間而沒有場景更改?

+0

是它的視頻流或視頻文件? – osgx 2010-12-14 18:14:41

+0

這是一個視頻流。我想對一個很少發生變化的MJPEG流進行轉碼(想象一個攝像機凝視着幾乎從未有任何動作的大廳,當它出現時,它將其隔離到屏幕的小區域)。 MJPEG質量好,每1〜5分鐘纔會出現一次(超低帶寬相機),壓縮噪音非常小。 – michael 2010-12-16 02:11:24

+0

由於其他限制,我正在轉碼爲h.264。 – michael 2010-12-16 02:13:04

回答

4

首先,請注意,FFmpeg本身並不編碼h264,而是x264

是的,定義一個異常長的keyframe應該會大大減少長時間運動很少或沒有運動的視頻的大小。爲什麼?因爲「關鍵幀」是包含所有視頻數據的幀 - 快照,如果您願意的話。所有其他框架將與關鍵框架的差異。要做到這一點的一個警告是,如果中間幀出現任何損壞,那麼視頻將被破壞,直到出現下一個關鍵幀。

要使用FFmpeg編碼時明確設置關鍵幀間隔,請使用-g開關。如果您的視頻爲每秒25幀,並且您希望每分鐘視頻顯示一次關鍵幀,請在您的FFmpeg命令行中添加-g 1500。 (25幀/ SX 60秒= 1500°F)

還有其他有趣的方面,你可以控制有關的關鍵幀,可能是你的興趣,其中有許多是記錄在這裏:x264 ffmpeg mapping and options guide

+0

你必須非常小心的關鍵幀間隔。如果關鍵幀之間的持續時間過長,則搜索或快速前綴將變得困難且耗時(因爲您想要搜索的幀與前一個關鍵幀之間的所有幀都需要解碼)。 – Serafeim 2011-05-09 06:56:57