指定ffmpeg的百分比而不是时间

use*_*159 5 video ffmpeg image image-processing thumbnails

要在视频中途获取图像缩略图,我可以这样做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自行处理它,那么它会更有效.

Duk*_*gal 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
Run Code Online (Sandbox Code Playgroud)

上面的命令是一个单行的示例,它捕获视频中的帧数并将其传递给“shuf”命令https://linux.die.net/man/1/shuf,该命令随机选择帧中的一个数字帧范围及其结果传递给 ffmpeg。

所以上面的代码能够从视频中仅用一行随机选择一帧。

您也许能够根据您的特定目标调整此方法。当然,假设七年后它仍然很重要。