需要使用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的工作原理:它可以看到最短视频的最后一帧。
如何强制ffmpeg在N秒后丢弃显示水印?
答案 0 :(得分:1)
必须自己回答。 ffmpeg mailing list帮我解决了这个问题。 主要思想是使用Apple Animation编解码器(它支持透明度)将现有水印转换为视频,并使用fade过滤器淡出创建视频的最后一帧。
示例:
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
,但它对我不起作用,不知道为什么