2009-10-13 5 views
5

vhookサブシステムはFFMPEGの最新バージョンから削除されているので、ビデオにウォーターマークを追加するにはどうすればよいですか?vfookなしのffmpeg透かし?

PNGに背景の透明度をオーバーレイできるようにする必要があります。

答えて

0

Javaを使い慣れている場合は、Xugglerでこれを行うことができます。特に、XugglerのMediaTool APIのチュートリアルでは、ビデオのデコードとエンコード方法と、作成した画像を使用してゼロからビデオを作成する方法を示します。これらのコンセプトを組み合わせて、ビデオをデコードし、ビデオ上でPNGをオーバーレイしてから、再度エンコードするプログラムを作るのは難しくありません。

+3

私はffmpegのに滞在したいのですが、様々なフォーマットをコードする、すでに1つのツールチェーンと十分に懸命であり、私はに別のものを投げることを憎みますミックス。その提案をありがとう! –

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 .........................*/ 
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 
関連する問題