ffmpeg如何提取选定的几个时间点的图片并进行缩放?

ffmpeg如何提取选定的几个时间点的图片并进行缩放?

我有一个 mp4 视频文件,想从中提取几张图片,然后缩小每张提取的图片。我采纳了类似帖子的建议,使用选择提取图片,但当我添加缩放时,选择过程没有任何作用,每一帧都被提取出来了。

我已经尝试了这两个命令,它们仅在命令中的缩放位置上有所不同:

ffmpeg -i "$input" -filter:v "select='lt(prev_pts*TB\,1.0)*gte(pts*TB\,1.0) +lt(prev_pts*TB\,6.0)*gte(pts*TB\,6.0) +lt(prev_pts*TB\,11.0)*gte(pts*TB\,11.0)'" -vf scale=480:-1 -vsync drop "/var/tmp/image_i_%d.jpg"

ffmpeg -i "$input" -filter:v "select='lt(prev_pts*TB\,1.0)*gte(pts*TB\,1.0) +lt(prev_pts*TB\,6.0)*gte(pts*TB\,6.0) +lt(prev_pts*TB\,11.0)*gte(pts*TB\,11.0)'" -vsync drop vf scale=480:-1 "/var/tmp/image_i_%d.jpg"

遇到同样的问题,选择什么也不做。

此命令不进行缩放,而是提取所需的图像,但我需要对它们进行缩放:

ffmpeg -i "$input" -filter:v "select='lt(prev_pts*TB\,1.0)*gte(pts*TB\,1.0) +lt(prev_pts*TB\,6.0)*gte(pts*TB\,6.0) +lt(prev_pts*TB\,11.0)*gte(pts*TB\,11.0)'" -vsync drop "/var/tmp/image_i_%d.jpg"

我在 Buster 上使用最新的 ffmpeg,但我尝试使用更旧的版本,也遇到了同样的问题。我的帧速率不是整数,所以我使用 lt 和 gte 的组合,但这不是问题所在。问题是使用缩放会终止选择过程。缩放按预期执行。

在使用“select”之前,我使用了一系列三个命令,每个命令都有不同的 seek_time,但这样做效率低下并且耗时太长,因为我有数百个这样的操作要做。

我怎么解决这个问题 ?

答案1

作用于流的多个过滤器应应用于同一个过滤器链中,并以逗号分隔。

所以,

ffmpeg -i "$input" -filter:v "select='lt(prev_pts*TB\,1.0)*gte(pts*TB\,1.0) +lt(prev_pts*TB\,6.0)*gte(pts*TB\,6.0) +lt(prev_pts*TB\,11.0)*gte(pts*TB\,11.0)',scale=480:-1" -vsync drop "/var/tmp/image_i_%d.jpg"

相关内容