FFMPEG 结合图像、mp3 和标志水印

b74*_*7fp 5 video mp3 mp4 ffmpeg

我认为这会奏效,但我遇到了错误。

ffmpeg -loop 1 -i "ARTWORK.jpg" -filter_complex "overlay=80:0" -i "MUSIC.mp3" -i "WATERMARK.gif" -filter_complex "overlay=10:350" -s 640x480 -shortest -vcodec libx264 -acodec aac -strict experimental -movflags faststart "CONVERTED.mp4"
Run Code Online (Sandbox Code Playgroud)

如果我不放置 -filter_complex "overlay=80:0" 部分(将艺术品放在“中间”),它会起作用,但艺术品不会居中(它是 480x480 jpeg)

我得到的错误是

Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_overlay_0
Run Code Online (Sandbox Code Playgroud)

这与有 2 个过滤器复杂部分有关,但两者都是必需的,所以不确定如何“标记”它们?

aer*_*tal 2

更新:OP想要实现的是能够定位两个叠加层。在这种情况下,明显的答案是您使用第三个输入作为主输入,例如黑框:

 ffmpeg -f lavfi -i color=black:800x600 -i <image1> -i <image2> -i <audio> -filter_complex 'overlay=...,overlay=' <output>
Run Code Online (Sandbox Code Playgroud)

滤波器overlay需要两个输入:主输入和叠加输入。

您只有 2 个图像输入,因此您不能overlay在同一命令中使用两个过滤器,因为它需要第三个视觉流。这就是为什么说它找不到匹配的流。

例如,您可以使用两个叠加过滤器向视频添加两个不同的徽标:

ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=...,overlay=' output
Run Code Online (Sandbox Code Playgroud)

在您的情况下,主要输入是艺术品,水印是需要放置在单个overlay.

请查看文档,因为无论输入大小如何,有些参数都可以帮助您实现目标。查看主输入和覆盖输入的宽度和高度:main_w, main_h, overlay_w, overlay_h

使用示例(距右下角 10 像素处叠加):

overlay=main_w-overlay_w-10:main_h-overlay_h-10