【问题标题】:ffmpeg dump specific length of video after seeking PICT_TYPE_I keyframeffmpeg 在寻找 PICT_TYPE_I 关键帧后转储特定长度的视频
【发布时间】:2016-12-30 07:32:21
【问题描述】:

我有一个 flv 视频,想转储假设 3s 第一个关键帧之后的视频长度 PICT_TYPE_I00:39 之后相遇。我准备好了ffmpeg seekingdocument 并在此引用

ffmpeg -ss 00:23:00 -i Mononoke.Hime.mkv -frames:v 1 out1.jpg

此示例将在以下位置生成一个图像帧 (out1.jpg) 电影开始后二十三分钟。输入将是 使用关键帧进行解析,速度非常快。从 FFmpeg 2.1 开始,当 使用 ffmpeg 进行转码(即不仅仅是流复制),现在是 -ss 即使用作输入选项,也“帧精确”。以前的 行为(仅寻找最近的前一个关键帧,即使不是 精确)可以使用 -noaccurate_seek 选项恢复。

所以我想如果我使用这个命令(把-ss放在-i之前)

ffmpeg -noaccurate_seek -ss 00:39 -i input.flv  -r 10 -s 720x400 -t 3.12 dump.flv

这应该转储一个最后一个3.12s 并从00:39 之后的第一个keyframe 开始的视频,对吗?毕竟,这是我需要的。

但结果是dump.flv 不是以keyframe 开头的,即PICT_TYPE_I 框架。

我知道我可以用ffprobe 找到所有keyframe 开始时间,并重新计算-ss 寻求时间来实现这一目标。但是有没有更好的方法?

【问题讨论】:

  • 你也有音频吗?
  • 不,音频不重要

标签: ffmpeg seek


【解决方案1】:

如果音频不重要,您可以使用

ffmpeg -ss 39.00 -i in.flv -vf select='if(eq(pict_type,I),st(1,t),gt(t,ld(1)))',setpts=N/FRAME_RATE/TB -an -t 3.12 out.flv

这里,选择过滤器会丢弃在搜索点之后的第一个关键帧之前的所有帧。 t 值控制所选的总持续时间。

请注意,视频时长是量化的,即 25 fps 视频的时长可以以 0.04 秒为步长。

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2015-03-11
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2011-07-12
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多