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

问题描述 投票:0回答:1

要从视频中途的图像中获取缩略图,我可以这样做

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 自己处理这个问题,效率会更高。

image video image-processing ffmpeg thumbnails
1个回答
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。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.