tags:

views:

1658

answers:

4

Since the vhook subsystem has been removed from the latest version of FFMPEG, how can I add a watermark to a video?

I need to be able to overlay a PNG with background transparency.

Thanks a lot, -- Felix Geisendörfer

A: 

If you're familiar with Java, you can do this with Xuggler. In particular the tutorials for the MediaTool API of Xuggler show you how to decode and encode a video, and separately how to make a video from scratch using images you create. It's not hard to combine those too concepts to make a program that can decode a video, overlay a PNG on the video, and then re-encode.

Xuggle
I'd like to stay with ffmpeg, encoding various formats is already hard enough with one tool chain and I'd hate to throw another one into the mix. Thanks for the suggestion so!
felixge
+4  A: 

Using Xuggler we can do this in java. while encoding the video using IMediaTool, you will be getting sequence of images. Using these images place water mark on each of these images and generate a output video. Following is the code block

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 .........................*/
Prajwal A P
A: 

I am also eagar to find out if someone has found or built a native .c plugin for latest FFmpeg (well maybe not latest - FFmpeg version SVN-r20214, built oct 12, 2009).

I don't want to have to pipe in another language if I can help it, and although the Java example provided by Stu and Prajwal is great, I too want to stick with the power of ffmpeg and their ever improving open-source product.

newfront
I don't deserve any credit there...I merely edited the answer to format the source code into a more readable form.
Stu Thompson
+1  A: 

The best I could reach was http://www.corbellconsulting.com/2010/07/using-ffmpeg-to-add-and-watermark-overlay-on-a-video-2/

However, I am unable to get it to work with ffmpeg 0.6.2.

Good luck.

Omar