我使用以下命令使视频上的覆盖图像从左到右过渡。
ffmpeg -i 测试.mp4 -i transparent.png -filter_complex "overlay=x='if(gte(t,0), -w+(t)*100, 3)':y=450" out.mp4
叠加图像不断从左向右移动。我需要它在某个点停止,比如从左到右的过渡。该怎么做?
答案1
呵呵,有趣的任务。所以我认为解决方案是
ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,w/2),-w+(t)*100,w/2)':y=0[out]" -map '[out]' -y out.mp4
此滤镜图将第二张图片从左向右移动,直到到达屏幕的一半(w/2)。因此,您只需修改此表达式中的 w/2。对于某些静态停止点(100 像素),情况也是如此:
ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,100),-w+(t)*100,100)':y=0[out]" -map '[out]' -y out.mp4
希望能帮助到你。
答案2
滑动效果怎么做?
通常,对于幻灯片效果,您必须:
- 使用以下方法创建具有正确大小和持续时间的特定颜色(例如黑色)的背景,在该背景上将显示图像:
color
来源。 - 使用
movie
来源 - 将图像叠加在背景上
overlay
筛选 - 根据当前帧号或时间戳设置叠加层的坐标
例子
image.png
下面是一个保存为(尺寸:1920⨉1080,剪辑时长:15 秒)的图像示例:
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='W-n:(H-h)/2' \
" output.mp4
图像将从右向左滑动而不停止:
以下是图像停止在中心的示例:
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='min(W-n\,0):(H-h)/2' \
" output.mp4
如何控制滑动参数
任何给定时间的覆盖位置都作为overlay
过滤器的一个选项指定。该位置必须以图像左上角的坐标给出。
上述第一个例子中的 X/Y 坐标对是W-n
和(H-h)/2
,其中:
W
是背景宽度(1920)n
是当前帧号H
是背景高度(1080)h
是覆盖高度(此处为 1080,但可能不同)
因此,在第 0 帧,图像最初将放置在1920-0=1920年像素从左侧开始,因此图像将从右侧滑入n增加。
一些技巧:
- 如果你想提高滑动图像的速度,你必须乘以n按固定数字。
- 如果希望图像在某个点停止,表达式
x
必须计算为0
,因此可以使用min(W-n, 0)
。在这种情况下,即使帧数大于宽度,图像也不会移动到负 x 位置,而是停留在 0 处。 - 如果要将图像从左向右或从下向上滑动,只需相应地修改坐标的表达式。