# 1 Para atenuar / desvanecer simultáneamente el audio:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
Los tiempos de fusión son en segundos .
# 2 automáticamente? No. Pero vea la solución a continuación
Primero puede ejecutar ffprobe para obtener la duración.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Obtendrás algo como esto:
video|13.556000
audio|13.816000
Luego puede usar lo anterior para colocar sus fundidos. Estos tiempos son en segundos.
Solución alterna
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg tiene una sseof
opción que le permite a uno buscar una entrada desde el final. Podemos usar eso para lograr nuestro objetivo. Así que alimentamos la entrada dos veces, y la segunda vez ingiere solo el último segundo. Le decimos a FFmpeg que conserve las marcas de tiempo, de modo que ffmpeg conserve la posición temporal de esta parte de la cola.
Aplicamos un desvanecimiento a esta cola y luego superponemos el resultado en la entrada completa. Dado que son el mismo archivo de medios, el primer plano cubre completamente el fondo, y desde que copyts
se aplicó, la superposición ocurre en el marco idéntico correspondiente en la entrada de fondo.
Para el audio, creamos un audio ficticio en blanco de 2 segundos de duración, y luego aplicamos un fundido cruzado de audio desde el audio principal a este audio ficticio. Como el segundo audio está en blanco, esto es, en efecto, un desvanecimiento para la entrada principal. Se -shortest
agrega para dejar fuera partes del audio ficticio después de que se haya producido el fundido cruzado.