从视频中提取缩略图以创建精灵非常耗时,特别是对于大型视频。

3

我需要在视频进度悬停时创建“预览”。我正在使用精灵图像和WebVTT文件来完成。使用ffmpegimagemagick。但是从mp4视频生成缩略图真的非常慢(对于2小时20分钟长的全高清、H246编码、2GB大小的视频,需要20-30分钟)。使用的命令:

"ffmpeg.exe -i largevideo.mp4 -f image2 -bt 20M -vf fps=1/5 thumbs-%03d.jpg"

这意味着每5秒会生成一个视频缩略图。有没有办法加快速度?生产环境下的视频可能更大。

操作系统:Win10,后续使用ImageMagick将由ffmpeg创建的所有缩略图创建为精灵图。


现在好些了吗?虽然我不知道这会如何有所帮助。 - Expressingx
现在没有“imagemagick”标签会更好吗?我认为我已经清楚地提到了“ffmpeg”是拖慢我的原因。这就是我展示“ffmpeg”命令的原因。 - Expressingx
不,这将取决于配置,但我也测试过1和5分钟,仍需要10多分钟。 - Expressingx
@llogan,时间间隔也可以,只要它更快。 - Expressingx
1
你可以尝试并行处理2个半部分或4个四分之一部分。使用ffprobe获取长度,然后同时启动两个ffmpeg命令。第一个命令将从时间=0运行到时间=总长/2,并在输出文件名前加上“ A”,第二个命令将从时间=t/2开始,并在输出文件名前加上“ B”。 - Mark Setchell
显示剩余5条评论
1个回答

6

嗯...我认为现在仅基于关键帧生成缩略图已经足够了。而且速度快了100倍。谢谢! - Expressingx
1
@Expressingx 请查看 scaletile (或 xstack) 过滤器。 - llogan
很好 -vf "scale=100:60,tile=5x30",谢谢!但是现在我不知道每个缩略图的时间戳,所以我无法生成正确的 .vtt 文件,但我想我会解决它。不知道为什么我不能标记你。 - Expressingx
好的,如果有人需要:ffprobe -v error -skip_frame nokey -show_entries frame=pkt_pts_time -select_streams v -of csv=p=0 input.mp4 这将给出每个关键帧的时间戳(以秒为单位)。例如 8499.991500,可以转换成格式为 hh:mm:ss 的时间 02:21:39.9920000 - Expressingx
@Expressingx 看起来你错过了我回答中的获取关键帧间隔链接。你可以使用scale=100:-1scale=-1:60来自动计算另一个维度并保持纵横比。 - llogan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接