【问题标题】:Using ffprobe/ffmpeg to extract individual frames and types in encode order使用 ffprobe/ffmpeg 按编码顺序提取单个帧和类型
【发布时间】:2018-07-03 06:35:17
【问题描述】:

我可以使用 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 中加载以提取运动矢量,但它们都应该遵循编码序列。有什么帮助吗?

编辑: 将播放更改为编码序列(或顺序)。

【问题讨论】:

  • 我想到的一种方法是在上面的代码之外运行,还运行:“ffprobe input.mp4 -show_frames | grep -E 'pict_type|coded_picture_number' > output.txt” 但我会必须在 python 中单独编程以使用文本信息与返回的 I、P、B 帧进行匹配。有没有其他方法可以仅使用 ffmpeg 更轻松地做到这一点?

标签: python ffmpeg keyframe ffprobe


【解决方案1】:

使用最新版本的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 将帧的时间戳设置为其在文件中的字节偏移量,这将跟踪编码/解码顺序。

【讨论】:

  • 谢谢,但问题是我希望帧的顺序与播放视频的顺序相同。如果看到“ffprobe input.mp4 -show_frames | grep -E 'pict_type|coded_picture_number' > output.txt”返回的结果,从0到最后一帧的“coded_picture_number”与“pict_type”是同一个序列想要来自 ffmpeg 但对于 *.png 文件。有什么线索吗?
  • 这不是播放顺序 - 这是编码顺序。按播放顺序过滤处理帧 - 这是我的命令输出的内容。
  • 谢谢。我正在使用 ffmpeg 3.4 版,我得到“无法识别的选项'frame_pts'”。运行命令时没有输出。有什么线索吗?
  • 你需要使用最新的 git 版本。
  • 似乎不适用于更新的 git。我正在使用 git 版本 2.15.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 2019-05-22
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
相关资源
最近更新 更多