![concatenando con crossfade varios videos (con audio)](https://rvso.com/image/1568491/concatenando%20con%20crossfade%20varios%20videos%20(con%20audio).png)
Tengo 7 videoclips cortos que tienen el mismo tamaño, velocidad de fotogramas, etc. Quiero concatenarlos uno tras otro con un fundido cruzado de 2 segundos y no perder audio. Tomado de una publicación anterior aquí, intenté simplemente concatenar/fundir los dos primeros usando:
ffmpeg -i *clip1.mp4 -i *clip2.mp4 \
-filter_complex "[0]fade=t=out:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va0]; \
[1]fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va1]; \
[va0][va1]overlay[outv];[0][1]amix[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4
Sin embargo, esto produce un video que inmediatamente desvanece el primer video y termina exactamente con la misma duración que el segundo video (que resulta ser de 40 segundos). ¿Asumo que esto se debe a "st=0" para el primer video [0]? Sin embargo, si cambio eso a "st=18" (el primer video dura 20 segundos), el video combinado resultante (out.mp4) todavía tiene el primer video desvaneciéndose inmediatamente (y el video completo todavía dura solo 40 segundos). de 58). Sin embargo, el audio del primero ahora dura 18 segundos (pero ahora se superpone al segundo video y su audio durante 18 segundos). ¿Alguna sugerencia de qué probar?
Respuesta1
Para unir clips con fundidos cruzados, debes tener en cuenta dos cosas: aplicar el fundido en el momento correcto y del tipo correcto, y retrasar las marcas de tiempo del video para que cada video comience en el momento correcto dentro del ensamblaje final.
En este caso, su primer video es de 20 segundos, su segundo video es de 40 segundos y desea un fundido cruzado de 2 segundos. Al ejecutar fundidos cruzados usando el filtro de superposición, solo necesitamos aplicar fundidos de entrada al video entrante. Aplicar un desvanecimiento al vídeo saliente producirá una caída de luminancia; a veces es deseable, pero lo evito.
Entonces, primero, aplicamos un desvanecimiento de 2 segundos.enal comienzo del segundo video.
[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];
Dado que el desvanecimiento se aplica únicamente al canal alfa, el vídeo debe tener un canal alfa. Por lo general, los videos no lo hacen, por lo que se aplica un filtro de conversión de formato de píxeles antes del desvanecimiento para cambiar el formato de píxeles del segundo video a uno que tenga nota alfa a
en yuva444p
. in
Se aplica un desvanecimiento de tipo a partir del tiempo 0
y de la duración 2s
delcanal alfasólo que los píxeles de color del vídeo no se ven afectados.
Ahora el segundo vídeo debería retrasarse. Dado que el primer vídeo tiene una duración de 20 segundos y se necesita un fundido cruzado de 2 segundos, el segundo vídeo debe comenzar en 18 segundos en el conjunto. Entonces se aplica el filtro setpts.
setpts=PTS-STARTPTS+18/TB
La tuberculosis se refiere a labase de tiempoy es la unidad en la que se almacenan las marcas de tiempo para una transmisión.
Para fundidos cruzados de audio, hay un filtro de fundido cruzado.
[0][1]acrossfade=d=2
Esto establece un fundido cruzado de 2 segundos.
Ahora podemos montar los dos clips,
ffmpeg -i *clip1.mp4 -i *clip2.mp4 \
-filter_complex \
"[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1]; \
[0][va1]overlay[outv];[0][1]acrossfade=d=2[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4