如何使用ffmpeg提取视频中的第一帧?
Posted
技术标签:
【中文标题】如何使用ffmpeg提取视频中的第一帧?【英文标题】:How to extract the very first frame of a second in a video using 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 秒的帧与第二个命令提取的第一帧进行比较时,它们是完全不同的。
为了以后使用,为了防止冲突,我只想提取原始输入视频的第一帧。我尝试使用 *** 专家过去告诉过的命令here。但是当我运行它时。它只是提取起始帧(只有 1 帧)。
如何每秒提取视频的起始帧?
【问题讨论】:
你想要每秒的第一帧吗?意思是如果你的帧速率是 25 fps,那么你想要每秒 25 帧中的 1 帧,对吗? @Milan 是的。你完全明白了。 【参考方案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 有什么解决方案吗?以上是关于如何使用ffmpeg提取视频中的第一帧?的主要内容,如果未能解决你的问题,请参考以下文章