d33*_*ika 101 thumbnails jpeg ffmpeg thumbnail-generator mjpeg
FFmpeg 可以从视频中捕获图像,这些图像可以用作缩略图来表示视频。在FFmpeg Wiki中捕获了最常见的方法。
但是,我不想在某些时间间隔内选择随机帧。我发现了一些在 FFmpeg 上使用过滤器来捕捉场景变化的选项:
过滤器thumbnail
试图找到视频中最具代表性的帧:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
Run Code Online (Sandbox Code Playgroud)
并且以下命令仅选择与之前相比具有超过 40% 变化的帧(因此可能是场景变化)并生成 5 个 PNG 的序列。
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Run Code Online (Sandbox Code Playgroud)
以上命令的信息归功于Fabio Sonnati。第二个看起来更好,因为我可以得到 n 个图像并选择最好的。我试过了,它生成了 5 次相同的图像。
更多的调查使我:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
Run Code Online (Sandbox Code Playgroud)
-vsync vfr
确保您获得不同的图像。这仍然总是选择视频的第一帧,在大多数情况下,第一帧是署名/标志并且没有意义,所以我添加了一个-ss
3 来丢弃视频的前 3 秒。
我的最终命令如下所示:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Run Code Online (Sandbox Code Playgroud)
这是我能做的最好的事情。我注意到,由于我只挑选了5个视频,所有视频都来自视频的开头,可能会错过视频后面出现的重要场景。
我想为任何其他更好的选择挑选你的大脑。
A.M*_*.M. 33
理想情况下,如何在 5 个时间跨度中的每一个中寻找第一个 > 40% 变化的帧,其中时间跨度是视频的第 1、2、3、4 和 5 个 20%。
您也可以将其分成 6 个时间跨度并忽略第一个时间跨度以避免积分。
在实践中,这意味着将 fps 设置为一个较低的数字,同时应用您的场景更改检查和您的参数以丢弃视频的第一位。
...就像是:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf fps=fps=1/600 out%02d.jpg
Run Code Online (Sandbox Code Playgroud)
ger*_*tas 13
定义有意义是困难的,但如果你想有效地制作 N 个缩略图,跨越整个视频文件,这就是我用来在用户上传的内容的生产中生成缩略图的方法。
for X in 1..N
T = integer( (X - 0.5) * D / N )
run `ffmpeg -ss <T> -i <movie>
-vf select="eq(pict_type\,I)" -vframes 1 image<X>.jpg`
Run Code Online (Sandbox Code Playgroud)
在哪里:
ffmpeg -i <movie>
单独读取的视频持续时间或ffprobe
具有很好的 JSON 输出编写器 btw上面简单地记下了电影每个分区的中心关键帧。例如,如果电影长度为 300 秒并且您想要 3 个缩略图,那么在 50 秒、150 秒和 250 秒后需要一个关键帧。对于 5 个缩略图,它将是 30s、90s、150s、210s、270s。您可以根据电影时长 D 调整 N,例如 5 分钟的电影将有 3 个缩略图,但超过 1 小时将有 20 个缩略图。
ffmpeg
对于~1GB H.264,每次调用上述命令都需要几分之一秒(!)。那是因为它立即跳转到<time>
位置(记住-ss
之前-i
)并获取第一个关键帧,这实际上是完整的 JPEG。渲染影片以匹配准确的时间位置不会浪费时间。
您可以将上面的scale
或 任何其他调整大小方法混合使用。您还可以删除纯色框或尝试将其与其他过滤器(如thumbnail
.
小智 6
尝试这个
ffmpeg -i input.mp4 -vf fps= no_of_thumbs_req/total_video_time out%d.png
Run Code Online (Sandbox Code Playgroud)
使用此命令,我可以生成代表整个视频的所需数量的缩略图。
归档时间: |
|
查看次数: |
94259 次 |
最近记录: |