要在视频中途从图像中获取缩略图,我可以ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg
。通过使用-ss 100
,它会在100
秒获得一个缩略图(假设视频的长度为200
秒,则会在视频的中间位置)。
但如果我不知道视频的确切长度,在我的应用程序代码中,我需要使用类似ffprobe
的内容来首先确定视频的长度,然后将其除以2获取缩略图时间。
有没有办法让ffmpeg以你想要的视频百分比来获取缩略图?因此,不要指定-ss 100
,而是使用-ss 50%
或-ss 20%
来将缩略图从中途或20%放入文件中?
我知道我可以通过应用程序代码执行此操作,但如果有一种方法可以让ffmpeg自行处理它,那将会更有效。
答案 0 :(得分:0)
这不漂亮,但是:
ffmpeg -y -i logo-13748357.mp4 -vf“ select = gte(n \,$(shuf -i 1-$(ffprobe -v error -select_streams v:0 -show_entries stream = nb_frames -of default = nokey = 1:noprint_wrappers = 1 logo-13748357.mp4)-n 1))“ -vframes 1 out_img.png
上面的命令是一个衬纸的示例,该衬纸获取视频中的帧数并将其传递给“ shuf”命令https://linux.die.net/man/1/shuf,该命令会随机选择帧范围内的数字和传递给ffmpeg。
因此,上面的方法能够从视频中随机选择一帧。
您也许可以使此方法适应您的特定目标。当然,这仍然需要七年的时间。