多次快速查找ffmpeg进行截图

3 ffmpeg

我遇到了https://askubuntu.com/questions/377579/ffmpeg-output-screenshot-gallery/377630#377630,它很完美。这正是我想要的。

不过,我使用远程 URL 来生成屏幕截图时间线。我确实知道可以使用https://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg(在 -i 之前使用 -ss )快速查找远程文件,但这仅运行一次。

我正在寻找一种使用方法

./ffmpeg -i input -vf "select=gt(scene\,0.4),scale=160:-1,tile,scale=600:-1" \
-frames:v 1 -qscale:v 3 preview.jpg
Run Code Online (Sandbox Code Playgroud)

命令,但使用快速查找方法,因为当前与远程文件一起使用时速度非常慢。我使用 PHP,但我知道使用 av_seek_frame 存在 C 方法,我几乎不了解 C,所以我无法将其实现到我正在编写的 PHP 脚本中。因此,希望可以在 PHP system() 函数中直接使用 ffmpeg 来完成此操作。

目前,我运行单独的 ffmpeg 命令(使用 -ss 方法),然后在 PHP 中将屏幕截图组合在一起。但是,使用此方法,每次都会重新获取元数据,更优化的方法是让这一切发生在同一个命令行中,因为我想减少对远程 url 发出的请求量,这样我就可以运行更多脚本彼此按顺序进行。

感谢您的帮助。

小智 6

是的,这是因为 -ss 不在 -i 之前,您需要在每个输入之前添加它。

这是一个可以超快速地取出它的工作示例。

ffmpeg -ss 10 -i test.avi -frames:v 1 -f image2 -map 0:v:0 thumbnails/output_0.png \
      -ss 800 -i test.avi -frames:v 1 -f image2 -map 1:v:0 thumbnails/output_1.png \
     -ss 2400 -i test.avi -frames:v 1 -f image2 -map 2:v:0 thumbnails/output_2.png
Run Code Online (Sandbox Code Playgroud)

所以 0 : v : 0 表示第一个输入,选择视频流,第一个视频流 1 : v : 0 表示第二个输入,选择视频流,第一个视频流 (0) 2 : v : 0 表示第二个输入,选择视频流, 第一个视频流 (0)