# 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.
-report
agregado y comparta el informe.Es un truco terrible, pero esto podría funcionar si todo lo que desea hacer es la aparición / desaparición gradual del audio, pero no sabe exactamente cuánto dura el clip:
[edit 2019-07-24: Tenga en cuenta que esta solución no es buena para las soluciones de transmisión, ya que requiere que se procese la pista completa antes de que se pueda transmitir el primer byte]
Otra opción es usar
acrossfade
con una pista silenciosa:fuente
La respuesta a la pregunta 2 es un rotundo ¡SÍ! Estaba buscando la misma funcionalidad y terminé escribiendo un script bash que solicita la duración del desvanecimiento en segundos y calcula el marco inicial para el desvanecimiento:
Los desvanecimientos requieren una nueva codificación, por lo que usar un
crf
valor bajo paralibx264
obtener una nueva codificación de alta calidad. Los comentarios deberían explicar todo lo demás.fuente
automatically figure out the duration
usaffprobe
, que está instalado conffmpeg
. ¿Quién dijo algo sobre cualquier restricción en el número de comandos o*nix
? Parece que el OP está utilizando una versión de UNIX. No.exe
en elffmpeg
comando. Yo mismo estoy usando elOS X
que está construidoUNIX
pero no lo estáUNIX
.ffprobe
es una parte integral de laffmpeg
distribución. Estás escogiendo liendres para salvar la cara OMI.