我正在寻找使用 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)*1
是1
针对第一帧和0
其他帧的。eq(in\,1)*1.1
- 的值eq(in,1)
是1
针对第二帧和0
其他帧的。
的值eq(in,0)*1.1
是1.1
针对第一帧和0
其他帧的。eq(in\,2)*1.05
1.05
对于第三帧和0
其他帧来说相同。gte(in\,3)*1
0
前 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