Tengo un archivo PNG (alfa) y un archivo de vídeo. Quiero crear un video en el que la primera pista sea la imagen y la segunda pista sea el video (PNG sobre video). El problema es que el PNG no conserva la transparencia.
Necesito crear una marca de agua (PNG) en una pista separada con ffmpeg sobre la pista de video.
ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov
Respuesta1
La sintaxis para agregar una marca de agua es ligeramente diferente. Necesita filtros de video para eso, que ya vienen incluidos con FFmpeg.
No estoy seguro de que puedas agregar una marca de agua transparente a una pista separada. La razón es que la imagen en sí (la "transmisión" PNG debe convertirse en una pista de video real (por ejemplo, con x264) y, dado que los codificadores de video no admiten la transparencia en esta etapa, no obtendrá una imagen transparente. .
Lo siguiente se agregará logo.png
en base.mov
la esquina superior derecha. Puede utilizar los siguientes parámetros para determinar la posición; en mi ejemplo, simplemente lo coloqué a diez píxeles del borde:
main_w
(ancho del vídeo principal)main_h
(altura del vídeo principal)overlay_w
(ancho de vídeo superpuesto)overlay_h
(altura del vídeo superpuesto)
El comando de filtro sería entonces:
movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]
Convirtiendo esto en un comando FFmpeg completo:
ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov
Los -c:v libx264 -crf 20
parámetros determinan el códec de vídeo de salida y su calidad (donde CRF probablemente será de 19 a 24, dependiendo de la calidad que desee; cuanto menor sea, mejor).
Hay una publicación de blog bastante buena sobre ese tema aquí:Cómo poner una marca de agua en un vídeo usando FFmpeg. Entra en detalles de posicionamiento.