![](/img/trans.png)
[英]Convert video into individual frames using Python without 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.