Tengo muchos videos y necesito poner una imagen delante de ellos durante unos 5 segundos, pero agregarla manualmente y renderizarla cada vez llevaría mucho tiempo, así que pregunto si es posible hacerlo a través de ffmpeg y si podría, por favor, ayudarme con eso ya que no tengo experiencia con ffmpeg. Ya encontré algunos comandos, pero ninguno funcionó. Este por ejemplo.
ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4
Puede hacer una superposición de imagen simple usando la siguiente sintaxis:
ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4
overlay=25:25
significa que queremos colocar la imagen 25px a la derecha y 25px hacia abajo, desde la esquina superior izquierda (0:0).
enable='between(t,0,20)'
significa que queremos que la imagen se muestre entre el segundo 0 y el 20.
[0:v][1:v]
significa que queremos que el primer archivo de video que importamos -i
, en nuestro caso input.mp4 o como lo ve ffmpeg, el archivo de entrada de video número 0, esté debajo del archivo de entrada de video 1, en nuestro caso image.png. :v
solo significa que queremos la pista de video de estas fuentes de archivo. [0:a]
significaría que queremos la primera pista de audio importada. Que también vendría de input.mp4 pero apuntaría a la pista de audio en lugar de la pista de video en el archivo mp4.
Si desea una determinada calidad/configuración de imagen y no la configuración que elige ffmpeg, agregue las opciones de codificación de imagen o audio que desea usar. El codificador de video predeterminado será x264. Consulte la guía de codificación H.264 para conocer las posibles configuraciones.
El -acodec copy
/ -c:a copy
que tiene en su comando fe simplemente reutilizaría el audio del archivo fuente. Aunque, por supuesto, no puede hacer eso con el video (en este caso), debe transcodificarse porque estamos creando una nueva fuente de video.
Si desea transcodificar audio, elimine la -c:a copy
parte. Es posible que deba especificar explícitamente un codificador, por ejemplo, -c:a aac -strict experimental
. Consulte la guía de codificación AAC para obtener más información.
pix_fmt
argumento? Veo esto en la mayoría de los comandos ffmpeg, pero ya sea que lo incluya o lo elimine, el resultado es el mismo. ¿Es realmente útil ponerlo en el comando?Esta es una adición a la excelente respuesta de PTS y una respuesta para chovy. Si desea colocar la superposición en la esquina inferior derecha, FFMPEG puede calcularlo muy fácilmente.
Utilice el comando modificado:
ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=W-w:H-h:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4
Ww significa ancho de video principal menos ancho de superposición, y lo mismo para Hh.
W
es un ffmpeg
alias para el ancho del video sobre el que se superpone, y w
es el alias para el ancho de la imagen que se superpone. Lo mismo con H
y h
. Estos también pueden denominarse main_w
(o _h
) y overlay_w
(o _h
)filter_complex
que el video de salida tenga siempre el mismo tamaño que el video de entrada? ¿O lo hace del mismo tamaño que el tamaño más grande del video de entrada y el png superpuesto?
timonsku
Azthy