La concatenación de videos con ffmpeg produce video silencioso cuando el primer video no tiene pista de audio

3

Tengo 3 archivos mp4:

  • 1.mp4 - Tiene video, no audio
  • 2.mp4 - Tiene video y audio
  • 3.mp4 - Tiene video y audio

He creado un archivo de clips (clips.txt) para la concatenación:

file '1.mp4'
file '2.mp4'
file '3.mp4'

Ejecuto la siguiente línea de comando:

ffmpeg -f concat -i "clips.txt" -c:a aac -b:a 160k -y "out.mp4"

El archivo que se produce tiene video pero no audio, probablemente porque 1.mp4 no tiene una pista de audio.

Si reorganizo clips.txt para que 1.mp4 no sea el primero, out.mp4 tiene una pista de audio.

¿Hay alguna manera de forzar a ffmpeg a usar audio? Supongo que tendría que producir una pista de audio silenciosa para cualquier video silencioso.

¡Gracias!

Phil
fuente
o agregue una pista silenciosa primero a la que no tiene audio, vea stackoverflow.com/questions/11779490/… para algunas ideas
Psycogeek
Eso era lo que estaba pensando que tendría que hacer. Esperaba una solución más limpia, pero decidí que me limitaría a eso.
Phil

Respuestas:

6

Para cualquier persona que tropiece con esto y quiera lograr lo mismo que yo, lo resolví de la siguiente manera:

ffmpeg -i "1.mp4" -f lavfi -i aevalsrc=0 -shortest -y "new_1.mp4"

Lo que esto dice es:

  • Tome 1.mp4 (que es el videoclip sin audio) (-i "1.mp4")
  • Genere el mínimo silencio requerido (-f lavfi -i aevalsrc = 0 -shortest)
  • Muestra el resultado (-y "new_1.mp4")

Desde aquí concatenaré como lo hice antes, pero reemplazando "1.mp4" en clips.txt con "new_1.mp4"

Phil
fuente
2
Para el audio silencioso, asegúrese de que coincida con el diseño del canal y la frecuencia de muestreo de las otras entradas. Por ejemplo, audio estéreo a 44.1kHz: -i anullsrc=cl=stereo:r=44100 (Estas son las configuraciones por defecto para el filtro anullsrc ).
llogan
Oh. No sabía hacer eso. ¡Gracias!
Phil
2
Además, considere agregar -c:v copy para simplemente remodelar el video en lugar de volver a codificarlo.
llogan