2009-10-13 16 views
5

Poiché il sottosistema vhook è stato rimosso dall'ultima versione di FFMPEG, come posso aggiungere una filigrana a un video?filigrana ffmpeg senza vhook?

Devo essere in grado di sovrapporre un PNG con trasparenza di sfondo.

risposta

0

Se si ha familiarità con Java, è possibile farlo con Xuggler. In particolare, le esercitazioni per l'API MediaTool di Xuggler mostrano come decodificare e codificare un video e separatamente come creare un video da zero utilizzando le immagini create. Non è difficile combinare anche questi concetti per creare un programma in grado di decodificare un video, sovrapporre un PNG al video e quindi ricodificarlo.

+3

mi piacerebbe stare con ffmpeg, la codifica di vari formati è già abbastanza difficile con la catena di uno strumento e non vorrei gettare un altro nel mescolare. Grazie per il suggerimento così! –

4

Utilizzando Xuggler possiamo farlo in java. durante la codifica del video utilizzando IMediaTool, riceverai una sequenza di immagini. L'uso di queste immagini posiziona un segno d'acqua su ciascuna di queste immagini e genera un video di uscita. Di seguito è riportato il codice di blocco

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

Se si compila ffmpeg dal repository git ufficiale, è probabilmente necessario prestare attenzione alla sintassi perché è leggermente cambiato nelle versioni più recenti.

Vecchio

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 

Nuova

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