FFMPEG提取幀內I、P、B幀

FFMPEG提取幀內I、P、B幀

有沒有辦法從 FFMPEG 或類似程式中提取幀內並按原樣保存它們?我知道您可以使用 . 將幀提取為 JPEG 影像序列-f image2。但這些是每一幀的完整影像。我只想匯出運動變化的圖像,因此我會讓 P 幀和 B 幀僅顯示運動變化,排除或掩蓋影像的未變化區域。

這可能嗎?

我正在使用的基本幀導出命令。這為我提供了指定 FPS 下每個畫面的全幀影像。

ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg

我希望導出幀,以便我有一個幀資料夾,其中第一幀是完整圖像,下一幀只是需要重新繪製圖像的圖像資料。暴露兩個幀之間的時間冗餘(這不是 I、P、B 幀所做的嗎?)

答案1

要提取某種類型的幀,請使用select篩選:

select=eq(pict_type\,<x>)

其中是<x>下列之一:pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

例如:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

要了解有關輸出的更多信息,請添加showinfo篩選:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4

答案2

P 和 B 訊框通常不包含每個已變更區域的新影像資料。相反,圖片被分成不同類型的巨集塊。某些類型的宏塊包含新的圖像數據,但大多數宏塊基於其他參考圖片和運動向量來計算內容。

不完全是您所要求的,但這將使用顏色來向您顯示每個巨集區塊的類型:

ffmpeg -debug vis_mb_type -i input.mp4 output.mp4

或者

ffplay -debug vis_mb_type input.mp4

這也將顯示運動向量:

ffplay -debug vis_mb_type -vismv 7 input.mp4

有關每個 MB 顏色的更多信息,請參閱連結:

調試宏塊和運動向量 FFMpeg 文檔

相關內容