FFmpeg -ss奇怪的行为

Eni*_*ter 7 video ffmpeg

我一直在使用FFmpeg将单帧提取到图像中.虽然有一些谷歌搜索,但事实证明:

ffmpeg.exe -i video.avi -ss 00:30:00 -y -an -vframes 1 test.png
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg.exe -ss 00:30:00 -i video.avi -y -an -vframes 1 test.png
Run Code Online (Sandbox Code Playgroud)

唯一的区别是-i和-ss的顺序.这是故意的"功能"吗?这有什么区别的技术原因吗?

wbe*_*rry 7

这是一个有根据的猜测.当-ss发生之前-i,它被视为输入的指令,因此视频流的第一帧是30秒的帧.当-ss发生之后-i,它被视为效果,并且读取和删除前30秒的帧,从而导致性能差异.


Lou*_*ier 7

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

'-ss position(输入/输出)'

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

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

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

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