Aprende a agregar una pista de audio más corta a un video en FFmpeg.

Mezclar videos y archivos de audio con FFMPEG es algo fácil siempre que tengas las instrucciones para hacerlo (o tengas la paciencia suficiente para leer la documentación oficial de FFMPEG). Pero hay un problema que puedes encontrar pero que probablemente no encontrarás una solución inmediata, considera el siguiente ejemplo de mezclar 2 videos en uno solo. El problema con esta situación es que el primer video contiene la transmisión de un estudiante, cuyas pistas de video y audio tienen diferentes duraciones (básicamente porque cuando la transmisión se grabó en el servidor, la pista de audio y el video son archivos separados, y cuando el estudiante cuelga, la transmisión de audio se detiene, sin embargo, hay algunos cuadros del video que están grabados):

Mix Audio Video Track FFMPEG

En este caso, como puedes ver, nuestro video de 3 minutos no tiene una pista de audio adjunta, sino la que estamos tratando de agregar de 2 minutos y 54 segundos, ¡así que el audio es mucho más corto que el video! Al unir estos 2 con algunos formatos como OPUS para audio y WebM para video, no podrá unirlos si tienen diferentes longitudes.

En este artículo, te explicaré cómo unir una pista de video y un audio más corto.

Si el video no tiene ninguna pista de audio

Si al igual que en nuestro ejemplo, el video no tiene una pista de audio, el comando a usar puede desglosarse así:

  • -i: el primer argumento de entrada corresponde a la pista de video que no tiene audio.
  • -i: el segundo argumento de entrada es el audio que es más corto que el video.
  • -af apad: estamos aplicando el filtro apad, que rellena el final de una secuencia de audio con silencio. Se usa junto con -shortestpara extender las transmisiones de audio a la misma longitud que la transmisión de video.
  • Como argumento posicional final el video de salida.

En nuestro caso, con un video en formato WebM, agregaremos un archivo de audio opus como este:

ffmpeg -i ./video-track.webm -i ./audio-track.opus -af apad -shortest ./output-video.webm

Como se mencionó, esta opción solo funcionará si el video que estás procesando no tiene ninguna pista de audio; si la tiene, deberás reemplazar la transmisión de audio con algunas opciones adicionales que encontrarás en la siguiente sección.

Si el video tiene una pista de audio

En algunos casos, el video que querrás unir con el nuevo audio tendrá un flujo de audio, aunque si es una pista de audio silenciada, por ejemplo, cuando se exporta con herramientas como Vegas Pro 17, entonces, lo qué intentarás hacer en este caso es reemplazar la secuencia de audio:

FFmpeg mix audio and video streams

Para continuar en este caso, deberá mapear la fuente de audio para usar la nueva en lugar de la actual usando la opción de mapa. Para los códecs de video y audio, simplemente los copiaremos, por lo que para el mapeo, usaremos la fuente de video de la primera entrada y la fuente de audio de la segunda entrada:

ffmpeg -i ./video-track.mp4 -i ./audio-track.mp3 -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 ./output-video.mp4

Si necesitas cambiar la posición de inicio del audio, por ejemplo, en lugar de dejar el padding al final del video, pero al principio:

FFmpeg mix audio and video streams at specific time location

Necesita especificar la posición con la opción --ss que buscará en este archivo de entrada a la posición dada, en nuestro caso queremos que nuestra pista de audio comience en el segundo 6 por lo que el relleno estará al principio:

ffmpeg -i ./video-track.mp4 -i ./audio-track.mp3 -ss 00:00:06 -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 ./output-video.mp4

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores