【问题标题】:How to extract the very first frame of a second in a video using ffmpeg?如何使用ffmpeg提取视频中的第一帧?
【发布时间】:2020-05-18 17:25:27
【问题描述】:

我正在尝试从视频中提取第一帧。我尝试了不同的方法来实现这一点,但我失败了。这里是我试过的命令。

ffmpeg -i input.ts -s 400x222 -q:v 3 -start_number 0 -vf fps=1 %d.jpg

稍后,我尝试使用特定秒的以下命令再次提取帧。这里我提取的是第 210 秒的帧。

ffmpeg -ss 210 -i input.ts -s 300x250 -t 1 -start_number 0 images.%d.jpg

我只想提取第二个的起始帧。假设从那一秒的 0.001 开始。

当我将我的第一个命令提取的 210 秒的帧与第二个命令提取的第一帧进行比较时,它们是完全不同的。

为了以后使用,为了防止冲突,我只想提取原始输入视频的第一帧。我尝试使用 stackoverflow 专家过去告诉过的命令here。但是当我运行它时。它只是提取起始帧(只有 1 帧)。

如何每秒提取视频的起始帧?

【问题讨论】:

  • 你想要每秒的第一帧吗?意思是如果你的帧速率是 25 fps,那么你想要每秒 25 帧中的 1 帧,对吗?
  • @Milan 是的。你完全明白了。

标签: ffmpeg


【解决方案1】:

试试这个命令:

ffmpeg -i input.mp4 -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" output-%04d.png

你必须在 between(mod(n\, 25)\, 0\, 0) 中传递你的视频帧率或 fps 我的视频 fps 是 25 所以我通过了 25

如果你的 fps 为 60,那么你必须在 between(mod(n\, 60)\, 0\, 0) 中传递 60

如果您想要每秒的前 5 帧,请使用 between(mod(n\, 25)\, 0\, 4),它会为您提供每秒的前 5 帧。

【讨论】:

  • 对于 VFR 流不可靠。有关通用表达式,请参阅我的回答 here
  • @Milan 我试过使用你的命令,但是当我在我的问题中重新运行第二个命令时(即在特定的那一秒再次提取帧),第 0 帧的帧不同。第一个和第二个命令生成的两个帧是不同的。
  • 您还想从视频的特定秒中提取一帧,对吗?
  • @MilanTejani 是的。我希望我的两个命令的第 0 帧应该相同。
  • @Gyan 有什么解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2015-11-06
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多