2009-10-13 19 views

Respuesta

0

Si está familiarizado con Java, puede hacerlo con Xuggler. En particular, los tutoriales para la API MediaTool de Xuggler le muestran cómo decodificar y codificar un video y, por separado, cómo hacer un video desde cero con las imágenes que crea. No es difícil combinar también esos conceptos para crear un programa que pueda decodificar un video, superponer un PNG en el video y luego recodificarlo.

+3

me gustaría quedarse con ffmpeg, la codificación de varios formatos ya es suficientemente duro con la cadena de una herramienta y no me gustaría lanzar una en la otra mezcla. ¡Gracias por la sugerencia! –

4

Usando Xuggler podemos hacer esto en Java. mientras codifica el video usando IMediaTool, obtendrá una secuencia de imágenes. Usando estas imágenes, coloque marcas de agua en cada una de estas imágenes y genere un video de salida. A continuación se presenta el bloque de código

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

Si compila ffmpeg desde el repositorio oficial de git, probablemente deba prestar atención a la sintaxis porque ha cambiado un poco en las versiones más recientes.

Antiguo

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 

Nueva

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 
Cuestiones relacionadas