簡體   English   中英

使用ffprobe / ffmpeg以編碼順序提取單個幀和類型

[英]Using ffprobe/ffmpeg to extract individual frames and types in encode order

我能夠使用ffmpeg提取關鍵幀。 我一直在使用這樣的東西:

ffmpeg -i input.mp4 -vf "select='eq(pict_type\,I)" -vsync vfr -qscale:v 2 I-thumbnails-%02d.png -vf "select='eq(pict_type\,B)" -vsync vfr -qscale:v 2 B-thumbnails-%02d.png -vf "select='eq(pict_type\,P)" -vsync vfr -qscale:v 2 P-thumbnails-%02d.png

現在的問題是,我希望這些提取的幀按編碼順序排列,如果可能的話,它們的提取方式應有時間戳記或以某種方式知道它們以特定順序開始的任何方式,例如從頭到尾:

IBBBIPPB ...... BI

但我可以按照編碼順序對幀進行排序

我想用它來加載python以提取運動矢量,但它們都應遵循編碼順序。 有什么幫助嗎?

編輯:更改播放以編碼序列(或順序)。

使用最新版本的ffmpeg,您可以運行,

ffmpeg -i input.mp4
  -vf "select='eq(pict_type\,I)" -vsync 0 -frame_pts 1 thumbnails-%02d-I.png
  -vf "select='eq(pict_type\,B)" -vsync 0 -frame_pts 1 thumbnails-%02d-B.png
  -vf "select='eq(pict_type\,P)" -vsync 0 -frame_pts 1 thumbnails-%02d-P.png

圖像序列號將與其在視頻中的索引位置(按顯示方式)相對應,后綴將指示幀類型。


要以編碼/解碼順序獲取幀,請運行

ffmpeg -i input.mp4
  -vf "setpts=POS,select='eq(pict_type\,I)" -vsync 0 -frame_pts 1 thumbnails-%09d-I.png
  -vf "setpts=POS,select='eq(pict_type\,B)" -vsync 0 -frame_pts 1 thumbnails-%09d-B.png
  -vf "setpts=POS,select='eq(pict_type\,P)" -vsync 0 -frame_pts 1 thumbnails-%09d-P.png

您應該按字母/詞匯順序對輸出圖像列表進行排序-即按編碼/解碼順序的圖像。 如果需要,可以將9位數字字段批量重命名為簡單的序列索引。

setpts=POS將幀的時間戳設置為其在文件中的字節偏移量,它將跟蹤編碼/解碼順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM