使用 ffmpeg 在同一图像上使用 fade in/out 两次
Using fade in/out twice on the same image using ffmpeg
我使用此命令在流开始后 5 秒后淡入徽标,并在 25 秒后淡出,就像这样
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]
fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1 [ov];[0:v][ov]
overlay=30:30" -f mpegts udp://127.0.0.1:port
但是我想在不同的时间段重复这个相同的标志,例如(在第 45 秒到第 60 秒)
当我尝试重复像这样的淡入淡出语法时 none 它们有效
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]
fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1,fade=in:st=45:d=1:alpha=1,
fade=out:st=60:d=1:alpha=1 [ov];[0:v][ov]
overlay=30:30" -f mpegts udp://127.0.0.1:port
我该如何解决这个问题?
我可以使用分钟而不是秒来淡化吗?
alpha 淡入的作用是在开始时间 之前将 alpha 置零,并将其插入持续时间内的存储值。 alpha 淡出的作用是在 start time+duration 之后将 alpha 归零,并在持续时间内从存储的值进行插值。因此,您的第一组 fade in/out 过滤器将 5 秒之前和 30 秒之后的 alpha 归零。第 2 个淡入滤波器将 45 秒(包括 5 到 30 秒)之前的所有 alpha 归零,淡入不起作用,因为 30 秒之后的所有 alpha 都已归零,因此它从 alpha=0 插值到 alpha=0。
您必须拆分流并使用多个叠加过滤器。
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]split=2[wm1][wm2];
[wm1]fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1[ovr1];
[wm2]fade=in:st=45:d=1:alpha=1,fade=out:st=60:d=1:alpha=1[ovr2];
[0:v][ovr1]overlay=30:30[base];[base][ovr2]overlay=30:30"
-f mpegts udp://127.0.0.1:port
我使用此命令在流开始后 5 秒后淡入徽标,并在 25 秒后淡出,就像这样
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]
fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1 [ov];[0:v][ov]
overlay=30:30" -f mpegts udp://127.0.0.1:port
但是我想在不同的时间段重复这个相同的标志,例如(在第 45 秒到第 60 秒) 当我尝试重复像这样的淡入淡出语法时 none 它们有效
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]
fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1,fade=in:st=45:d=1:alpha=1,
fade=out:st=60:d=1:alpha=1 [ov];[0:v][ov]
overlay=30:30" -f mpegts udp://127.0.0.1:port
我该如何解决这个问题? 我可以使用分钟而不是秒来淡化吗?
alpha 淡入的作用是在开始时间 之前将 alpha 置零,并将其插入持续时间内的存储值。 alpha 淡出的作用是在 start time+duration 之后将 alpha 归零,并在持续时间内从存储的值进行插值。因此,您的第一组 fade in/out 过滤器将 5 秒之前和 30 秒之后的 alpha 归零。第 2 个淡入滤波器将 45 秒(包括 5 到 30 秒)之前的所有 alpha 归零,淡入不起作用,因为 30 秒之后的所有 alpha 都已归零,因此它从 alpha=0 插值到 alpha=0。
您必须拆分流并使用多个叠加过滤器。
ffmpeg -re -i test.mp4 -ignore_loop 0 -i logo.gif -filter_complex "[1:v]split=2[wm1][wm2];
[wm1]fade=in:st=5:d=1:alpha=1,fade=out:st=30:d=1:alpha=1[ovr1];
[wm2]fade=in:st=45:d=1:alpha=1,fade=out:st=60:d=1:alpha=1[ovr2];
[0:v][ovr1]overlay=30:30[base];[base][ovr2]overlay=30:30"
-f mpegts udp://127.0.0.1:port