我正在尝试从视频中截取一些快照。所以我在他们的官方页面上找到了以下代码:
ffmpeg -i myvideo.avi -f image2 -vf fps=fps=1/60 img%03d.jpg
但是,我找不到有关选项的任何文档,而且他们也从未解释过它。
因此,如果您知道有关 ffmpeg 选项的一些参考或文档,请分享。
这篇文章的主要问题是 是什么image2 -vf fps=fps=1/60
意思。我不明白为什么他们只写成fps=1/60
。是image2
某种选择还是什么?
和下面的有什么区别?
ffmpeg -i filename.avi -ss 00:00:01 -r 1/60 image%03d.png
答案1
你可以找到文档在 FFmpeg 主页上。
这fps
筛选有多个选项,其中一个是fps
。因此,要声明该选项,您必须调用:
-vf fps=fps=1/60
↑ ↑ ↑
| | |
| | |__ value
| |______ option
|__________ filter
-vf fps="fps=1/60"
当然,你也可以写。
因此,当您使用时,1/60
这意味着每秒 1/60 帧,或每 60 秒 1 帧。无论如何,这和之间的区别-r 1/60
在于,过滤器在任何-r
选项之前应用。您给出的两个命令在理论上都应该有效,但是其中-r
一个命令为我创建了太多的输出帧(但我不是第一个注意到这一点的人)。坚持使用fps
过滤器。
请注意,还有另一个过滤器调用framerate
,与 类似fps
,但不完全相同。它不会通过复制或丢弃帧来实现目标帧速率,而是会插入帧,即合并相邻帧以创建新图像。
如果你剖析该命令,你会发现这image2
是的选项值-f
。这指定了输出格式。一般来说,你可以ffmpeg
像这样使用它:
ffmpeg-f输入格式-我输入文件-F输出格式 输出文件
在您的示例中,我们告诉ffmpeg
使用复用器image2
%02d
,它允许您通过指定输出名称的模式(如)从视频中输出单个图像文件。
这里-f image2
是多余的,因为当您使用图像输出格式时应该自动选择多路复用器。
解复用器image2
还有一个framerate
选项,允许您指定假定的输入文件帧速率。例如,如果您有一个每秒包含一张图片的幻灯片,则将其用作-framerate 1
输入选项。请参阅这里举一些例子。