在 ffmpeg 中为视频的前三帧设置自定义比例

在 ffmpeg 中为视频的前三帧设置自定义比例

我正在寻找使用 ffmpeg 为视频的前三帧设置自定义比例的方法。

我的视频是图像循环,持续 5 秒,每秒 10 帧。为此,我使用:

ffmpeg -r 10 -loop 1 -i myimage.jpg -t 5 out.mp4

我尝试为前三帧设置不同的亮度,然后使用以下命令使其正常工作:

ffmpeg -r 10 -loop 1 -i background.jpg -filter_complex eq=brightness=eq(n\,0)*1.2+eq(n\,1)*0.5+eq(n\,2)*4.5:eval=frame -t 5 out.mp4

但我无法让它适用于比例尺。我尝试使用 scale=size 和其他我能找到的东西ffmpeg 文档,但对我没什么作用。

如果你有任何提示,请告诉我!谢谢。

编辑:以下是更多详细信息:我希望放大或缩小图像,但不希望低于其默认比例。我的 PNG 比例默认为 100%,我应该先放大到 110%,然后立即放大到 108%,但我不需要低于 100%。

例如:我想要一个 1920x1080 的视频。在这个 1920x1080 的视频中,如果我希望第 1 帧为 100% 比例,第 2 帧为 110% 比例,第 3 帧为 105% 比例:

Frame 1: 1920x1080
Frame 2: 2112x1188 (cropped at 1920x1080)
Frame 3: 2016x1134 (cropped at 1920x1080)

答案1

我们可能会使用放大过滤如下:

ffmpeg -y -r 10 -loop 1 -i myimage.jpg -vf zoompan=z='eq(in\,0)*1+eq(in\,1)*1.1+eq(in\,2)*1.05+gte(in\,3)*1':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':fps=10:s=1920x1080 -t 10 out.mp4

这种eq(in\,0)*1+eq(in\,1)*1.1+eq(in\,2)*1.05+gte(in\,3)*1表达方式是一种编程......


z='eq(in\,0)*1+eq(in\,1)*1.1+eq(in\,2)*1.05+gte(in\,3)*1表达式描述:

  • eq(in\,0)*1- 的值eq(in,0)1针对第一帧和0其他帧的。
    的值eq(in,0)*11针对第一帧和0其他帧的。
  • eq(in\,1)*1.1- 的值eq(in,1)1针对第二帧和0其他帧的。
    的值eq(in,0)*1.11.1针对第一帧和0其他帧的。
  • eq(in\,2)*1.051.05对于第三帧和0其他帧来说相同。
  • gte(in\,3)*10前 3 帧相同,1其他帧也相同。

上述表达式的总和为:1.0对于帧#0,1.1对于帧#1,1.05对于帧#2 和1.0对于帧#3。

x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)将图像居中(如zoompan 示例)。


1Hz 的 192x108 图像示例:

构建合成图像(用于测试):

ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=1:duration=1 myimage.png

对前 3 帧应用缩放:

ffmpeg -y -r 1 -loop 1 -i myimage.png -vf zoompan=z='eq(in\,0)*1+eq(in\,1)*1.1+eq(in\,2)*1.05+gte(in\,3)*1':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':fps=1:s=192x108 -t 10 out.mp4


第一张图片(缩放 = 1):
在此处输入图片描述

第二张图像(缩放 = 1.1):
在此处输入图片描述

第三幅图像(缩放 = 1.05):
在此处输入图片描述

第四张图像(缩放 = 1):
在此处输入图片描述

相关内容