Hacer un fundido cruzado entre dos piezas de contenido de video en realidad es bastante complicado en FFmpeg. No hay filtro de "fundido cruzado" como el que hay para el audio.
¿Cuál es una manera eficiente de hacerlo?
ffmpeg
video-editing
Mark Gerolimatos
fuente
fuente
[0:a][1:a] acrossfade=d=1 [audio]
al filtro y luego-map "[audio]"
al comando y funcionó. Si lo desea, pruébelo y actualice la respuesta.Respuestas:
TL; versión DR:
Este ejemplo solo realiza video, suponiendo que ambos videoclips tengan la misma resolución, velocidad de fotogramas, etc. Esto creará un desvanecimiento de 1 segundo entre fadeoutclip y fadeinclip. Suponga que el clip de desvanecimiento dura 10 segundos. Tenga en cuenta que esto está formateado para mayor claridad: es realmente una línea de código.
Versión completa:
Aquí hay una explicación de lo que se trataba todo esto:
Especificación de entrada ... obvio
Crear un
filter_complex
: suponiendo que ya comprenda los complejos de filtro:Primero, dividimos las dos corrientes en dos partes, cada una con el filtro de recorte : el contenido y la sección de fundido cruzado. El desvanecimiento se divide en contenido y sección de desvanecimiento, mientras que el desvanecimiento se corta en la sección de desvanecimiento y el contenido. Total de cuatro secciones.
Tenga en cuenta que, estrictamente hablando, no tenemos que separar las secciones de desvanecimiento cruzado: PODRÍAMOS especificar el desvanecimiento y el desvanecimiento en tiempos para los dos videoclips. Sin embargo, al hacer esto, nosotros:
overlay
del uso del filtro.Cada una de estas cuatro secciones especifica: tiempo de inicio (segundos), tiempo de finalización (segundos) y el
setpts=PTS-STARTPTS
filtro misterioso , que esencialmente hace que cada subclip de video comience a 0 segundos. Esto será vital al volver a componerlos.Tenga en cuenta que los
s=0
especificadores son redundantes, y elsetpts
filtro paras=0
los TAMBIÉN es redundante. Sin embargo, ambos se especifican de forma redundante para permitir que el tiempo de inicio cambie de 0, sin romper el complejo del filtro. Además, el segundo clip de contenido se ejecuta hasta el final, por lo quee=
no se especifica la parte (end =).A continuación, especificamos la aparición y desaparición gradual: primero agregamos un canal alfa (transparencia) a ambas secciones de desvanecimiento especificando un formato de píxel de
yuva420p
. En realidad, puede usar cualquier formato que proporcione un canal alfa.A continuación, en este subcomplejo de filtro, especificamos uno para desvanecer y otro para desvanecer. Esto
alpha=1
significa que el video en sí no se oscurecerá, solo que la cantidad de transparencia se desvanecerá.st
significa inicio,d
significa duración.¿Qué es esto ?: El
fifo
filtro garantiza que haya espacio de búfer disponible en el complejo del filtro. Sorprendentemente, este NO es el predeterminado. Si no hace esto, el fundido cruzado podría fallar si la salida de la etapa anterior supera el filtro de superposición a continuación. Sí, sé lo que estás pensando ahora. De hecho, es un error FFMPEG .Ahora, superponga las dos secciones de fundido: Al asegurarnos de que las dos secciones de fundido cruzado sean del mismo tamaño, no tenemos que preocuparnos por las opciones bastante desagradables que toma el filtro de superposición (y por eso las ignoramos aquí):
Finalmente, alineamos nuestros tres segmentos usando el filtro concat .
Y ahora, asigne el pad de salida como fuente de video.
¡NO OLVIDE configurar el formato de píxeles PARA LO QUE USTED NORMALMENTE (normalmente
yuv420p
), ya que la sección de fundido cruzado lo habrá configuradoyuv420
en el canal de salida! (como no lo especificamos, puedes usar los argumentos de superposición) Por supuesto, si QUIERESyuv420
, entonces estás bien :-)Luego puede recombinar el audio más tarde (fuera del alcance de estas preguntas y respuestas)
fuente
trim=start=0:end=9
, (en lugar detrim=st=0:e=9,
..Filter setpts has an unconnected output
para el script. Ya cambié los parámetros de recorte para comenzar y finalizar.