繁体   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