无需读取整个视频,即可按一定间隔从视频中创建缩略图

无需读取整个视频,即可按一定间隔从视频中创建缩略图

简短问题:我想在特定时间从视频网址中截取一些截图,但不想读取整个视频。

假设我有一个视频存储在某个 URL 中(例如https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4)。视频文件较大,但是我们可以在视频上进行定位。

现在我想截取视频的 4 张截图/缩略图。例如,如果视频的大小是 100 秒,我想分别在 20 秒、40 秒、60 秒和 80 秒处截取截图。

使用教程wiki:每隔 X 秒创建一个视频缩略图我可以做这个

ffmpeg -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vf fps=1/20 img%03d.jpg

但这种方法的问题在于,它会在返回屏幕截图之前读取整个输入。但由于输入是可搜索的,这似乎是一种浪费。更好的方法是搜索位置并获取它们。目前我们使用类似

for i in 20 to 80 step 20
    ffmpeg -noaccurate_seek -ss {i} -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vframes 1 out-{i}.png

这似乎有效,但运行每个 ffmpeg 仍然需要一些时间,并且每个 ffmpeg 解码相同视频 url 的标头,这似乎是多余的。有没有办法在单个 ffmpeg 调用中移除这个重复的工作?

PS 没有必要只使用 ffmpeg 来回答。我们还可以使用 mpv/mplayer 或 vlc 或 Linux 中可用的任何其他播放器/转换器。

相关内容