FFmpeg -ss奇怪的行为

时间:2011-08-08 15:34:35

标签: video ffmpeg

我一直在使用FFmpeg将单帧提取到图像中。虽然有一些谷歌搜索,但结果是运行:

ffmpeg.exe -i video.avi -ss 00:30:00 -y -an -vframes 1 test.png

...运行速度明显慢于以下速度,几乎完全相同,但是瞬间:

ffmpeg.exe -ss 00:30:00 -i video.avi -y -an -vframes 1 test.png

唯一的区别是-i和-ss的顺序。这是故意的“功能”吗?这有什么不同的技术原因吗?

4 个答案:

答案 0 :(得分:7)

这是一个有根据的猜测。当-ss出现在-i之前时,它会被视为输入的说明,因此视频流的第一帧是30秒的帧。在-ss之后发生-i时,会将其视为效果,并且会读取和删除前30秒的帧,从而导致性能差异。

答案 1 :(得分:7)

wberry的答案确实是一个受过良好教育的答案。阅读文档可以进一步提供帮助:

  

' - ss位置(输入/输出)'

     

当用作输入选项(在-i之前)时,在此输入文件中寻找位置。当用作输出选项(在输出文件名之前)时,解码但丢弃输入,直到时间戳到达位置。这比较慢,但更准确。

     

(位置可以是秒或hh:mm:ss [.xxx]形式。)

     

(见http://ffmpeg.org/ffmpeg.html#Main-options

我目前正在编写一个音频采集应用程序,因此,我正在使用更慢但更准确的方法。您可以选择最佳方法。

答案 2 :(得分:2)

当-ss出现在-i之前时,它会转到最近的关键帧(在H.264文件中每10秒钟25帧,因为H.264将使用250的GOP)。这使得搜索速度非常快,因此您可以在-i之后添加另一个-ss,以便在第一个-ss之后转到小数位置。

在-i之后使用-i将寻找确切的位置,但它非常慢。

有关示例和更多信息,请参阅https://trac.ffmpeg.org/wiki/Seeking

答案 3 :(得分:2)

我刚刚完成了一个从视频内容生成缩略图的应用程序。

你应该看看这个, http://ffmpeg.org/trac/ffmpeg/wiki/Seeking%20with%20FFmpeg

它描述了一种方法,将-ss标志(来自两个位置)组合成一个统一的命令,提供帧time的准确性,以及更快的帧选择。

ffmpeg -ss 00:02:30 -i Underworld.Awakening.avi -ss 00:00:30 -vframes 1 out3.jpg

并且还包含指向其他可能技巧的链接,例如来自单个视频的多个拇指。