2013-03-18 36 views
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的工作原理:它使最短视频的最后一帧可见。

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

+0

相关讨论:[FFmpeg-user:在视频开头显示水印](http://ffmpeg.org/ pipermail/ffmpeg的用户/ 2013三月/ 014116.html)。 – LordNeckbeard 2013-03-19 17:55:03

+0

yeap,它是我的:) – mente 2013-03-19 19:40:03

+0

我只是将它添加到其他人的情况下,对该线程的回复将对他们有用。 – LordNeckbeard 2013-03-19 19:51:19

回答

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,但它不适合我,不知道为什么