没有vhook的ffmpeg水印?

时间:2009-10-13 11:40:07

标签: ffmpeg watermark

由于vhook子系统已从最新版本的FFMPEG中删除,如何在视频中添加水印?

我需要能够覆盖具有背景透明度的PNG。

4 个答案:

答案 0 :(得分:4)

使用Xuggler我们可以在java中执行此操作。 使用IMediaTool对视频进行编码时,您将获得一系列图像。使用这些图像在每个图像上放置水印并生成输出视频。以下是代码块

BufferedImage imageB = event.getImage();

/*....................... water mark .........................*/
Graphics2D g2d = (Graphics2D) imageB.getGraphics();
g2d.drawImage(imageB, 0, 0, null);

//Create an alpha composite of 50%
AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
g2d.setComposite(alpha); 

g2d.setColor(Color.YELLOW);


g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

g2d.setFont(new Font("Arial", Font.BOLD, 30));

String watermark = "Sample water mark";

FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle2D rect = fontMetrics.getStringBounds(watermark, g2d);
yScrolling = imageB.getHeight() - (int) rect.getHeight() / 2;

g2d.drawString(watermark, (imageB.getWidth() - (int) rect.getWidth()) / 2,
                         (imageB.getHeight() - (int) rect.getHeight()) / 2);
g2d.drawString(watermark, xScrolling,yScrolling);

//Free graphic resources
g2d.dispose(); 

 /*....................... water mark .........................*/

答案 1 :(得分:2)

如果从官方git存储库编译ffmpeg,您可能需要注意语法,因为它在较新版本中有所改变。

ffmpeg -i input.mp4 -acodec copy -vf "movie=0:png:watermark.png [wm];[in][wm] overlay=5:5:1 [out]" -f mp4 -b 2500k -vcodec libx264 -vpre fast -ac 1 -y output.mp4

ffmpeg -i input.mp4 -acodec copy -vf "movie=watermark.png [wm];[in][wm] overlay=5:5 [out]" -f mp4 -b 2500k -vcodec libx264 -vpre fast -ac 1 -y output.mp4

答案 2 :(得分:1)

我能达到的最好成绩是http://www.corbellconsulting.com/2010/07/using-ffmpeg-to-add-and-watermark-overlay-on-a-video-2/

但是,我无法使用ffmpeg 0.6.2。

祝你好运。

答案 3 :(得分:0)

如果您熟悉Java,可以使用Xuggler执行此操作。特别是Xuggler的MediaTool API教程向您展示了如何对视频进行解码和编码,以及如何使用您创建的图像从头开始制作视频。将这些概念结合起来制作可以解码视频,在视频上叠加PNG然后重新编码的程序并不难。