2009-10-13 42 views

回答

0

如果你對Java很熟悉,你可以用Xuggler來做到這一點。特別是Xuggler的MediaTool API教程向您展示瞭如何解碼和編碼視頻,以及如何使用您創建的圖像從頭開始製作視頻。將這些概念組合起來製作一個可以解碼視頻的程序,在視頻上疊加PNG,然後重新編碼並不難。

+3

我想留在ffmpeg的,編碼各種格式已經夠難的一個工具鏈和我討厭拋出一個又一個進入混合。謝謝你的建議! – 2009-11-11 14:07:23

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