快速將 I 幀提取到圖像中

快速將 I 幀提取到圖像中

我使用 FFmpeg 從 MKV/MP4 檔案中提取所有 I 幀,但 FFmpeg 似乎需要解碼所有幀才能完成此操作,因此如果視訊檔案為 1080p 並且長度超過 10 分鐘,則需要很長時間。我只希望它從一個 I 幀跳到另一個 I 幀並將它們轉儲到 JPG/PNG 檔案。另外,我需要知道 I 幀的時間戳。

另一個選擇是使用 FFprobe 取得所有 I 幀的時間戳,但這也會解碼整個檔案。

我正在嘗試做一些類似於 Avidemux 的事情。在 Avidemux 中,您只需按向上或向下箭頭鍵即可非常快速地步進入每個 I 幀,但這樣做無需解碼所有 B/P 幀。

答案1

使用

ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png

skip_frame告訴解碼器僅處理關鍵影格。-vsync 0(在此命令中)保留時間戳記。-frame_pts設定輸出影像檔案名稱的數字部分來表示時間戳記。對數字的解釋需要您知道幀速率,例如,如果幀速率為 30,則圖像名稱 out75 對應於時間戳 75/30 = 2.50 秒。-r 1000如果您希望數字代表毫秒,則可以新增。

相關內容