0

需要在使用 ffmpeg 的视频的前 3 秒添加水印。这是我现在得到的:

ffmpeg -y -i '255871.mov' -qscale:v 0 -qscale:a 0 -vf '[in] transpose=1 [out];movie=watermark.png , select=lte(t\,3) [bg]; [out][bg] overlay=x=20:y=main_h-60 [out]' output.mp4

它将视频向右旋转,并在前 3 秒的视频底部添加水印。问题是在整个视频中都可以看到水印。

认为选择根本不起作用。尝试了以下命令

ffmpeg -y -i '255871.mov' -qscale:v 0 -qscale:a 0 -vf '[in] transpose=1 [out];movie=watermark.png , select=0 [bg]; [out][bg] overlay=x=20:y=main_h-60 [out]' output.mp4

水印不可见。这是正确的,并证明select过滤器按预期工作。据我了解,这就是 ffmpeg 的工作方式:它使最短视频的最后一帧可见。

如何在 N 秒后强制 ffmpeg 丢弃显示水印?

4

1 回答 1

1

必须自己回答。ffmpeg 邮件列表帮助我解决了这个问题。主要思想是使用 Apple Animation 编解码器(它支持透明度)将现有水印转换为视频,并使用淡入淡出滤镜淡出创建视频的最后一帧。

例子:

ffmpeg -loop 1 -i watermark.png -t 3 -c qtrle -vf 'fade=out:73:1:alpha=1' watermark.mov
ffmpeg -y -i '255871.mov' -qscale:v 0 -qscale:a 0 -vf '[in] transpose=1 [out];movie=watermark.mov [bg]; [out][bg] overlay=x=20:y=main_h-60 [out]' output.mp4

需要淡出,因为 ffmpeg 将覆盖视频的最后一帧用于视频的其余部分。alpha=1此过滤器通过参数使最后一帧完全透明。其实应该是这样fade=out:74:1:alpha=1,但是对我没有用,不知道为什么

于 2013-03-19T19:47:57.010 回答