Unir varias pistas de vídeo súper rápido y fácil con ffmpeg
Hoy quería unir dos pistas de vídeo de mis gameplays de Tomb Raider 1 Remastered. Tenía estos dos vídeos separados porque grabé dos partes para el mismo nivel, ya que no tuve la oportunidad de completarlo en una sola sesión.
Me he topado varias veces con esta necesidad, pero nunca había profundizado en ella.
Tras una rápida búsqueda, descubrí la todopoderosa solución: esta operación se puede realizar de forma increíblemente rápida y superfácil con ffmpeg concatenate.
Importante: este método permite unir un vídeo tras otro, sin editarlo. Si necesitas añadir transiciones o hacer otras cosas, eso requiere softwares de edición de vídeo como Openshot, Premiere, Vegas, o similares.
Tabla de contenidos
Fusionar vídeos con exactamente los mismos códecs
En la mayoría de los casos tendrás vídeos grabados de la misma forma y sólo necesitarás que una pista se muestre después de la otra.
Para ello, puedes seguir estas sencillas instrucciones:
- Crea una carpeta en tu PC con todas las pistas que quieras fusionar
- Renombra las pistas a algo más fácil, como "part1.mp4", "part2.mp4" y así sucesivamente
- Crea un archivo de texto dentro de esa carpeta y llámalo "list.txt" o algo similar.
- Dentro del archivo de texto, escribe la ruta a cada archivo en líneas separadas como en el código de ejemplo de abajo
- Ejecute el comando ffmpeg en su terminal para unir los vídeos, vea el siguiente fragmento de código
El archivo de texto con la lista puede ser similar al siguiente:
# lista.txt # Véase: https://trac.ffmpeg.org/wiki/Concatenate#samecodec archivo 'parte1.mkv' archivo 'parte2.mkv'
Las dos primeras líneas son "comentarios" y no serán utilizadas por ffmpeg, puedes eliminarlas si quieres. Por supuesto en tu caso podrías tener diferentes tipos de archivo como mp4, wav, mov, u otros. Esto es sólo un ejemplo.
El comando ffmpeg a ejecutar en tu terminal puede ser adaptado a tus necesidades, aquí tienes un ejemplo:
ffmpeg -f concat -safe 0 -i list.txt -c copy video_fusionado.mkv
Esto creará un archivo "merged_video.mkv" dentro de tu carpeta. Puedes utilizar otros tipos de archivo como mp4, mov, wav, etc. Además, puedes utilizar rutas absolutas tanto en el archivo list.txt como en el comando ffmpeg. El atributo "-safe 0" puede omitirse si utiliza rutas relativas.
Si lo desea, puede guardar el comando ffmpeg anterior en un archivo run.bat y ejecutarlo así, en lugar de tener que copiar el comando cada vez en el terminal.
Fusionar vídeos con distintos códecs
Esta operación es seguramente más compleja y tiene más probabilidades de salir mal, así que te invito a que leas también la documentación de ffmpeg sobre este tema.
En resumen, necesitamos ejecutar un comando similar al siguiente, dependiendo de nuestras necesidades:
ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \ -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mkv
En este caso suponemos que tenemos tres tipos de archivo diferentes como entrada: mp4, webm y mov. WebM suele ser la versión comprimida de un archivo de vídeo, mientras que MOV suele proceder de dispositivos Apple.
El parámetro "filter_complex" le dice a ffmpeg qué flujos tomar de los archivos de entrada y enviarlos como entrada al filtro concat.
Por último, los parámetros "map" indican a ffmpeg que utilice los resultados del filtro concat en lugar de los flujos directamente de la entrada.
Conclusiones
En mi caso, fusioné una pista de 1 hora de duración con otra de 23 minutos. El peso de ambos archivos era de 4,77 GB. El archivo de salida resultante tenía la misma longitud y peso y sólo tardé dos minutos en completar la operación.
Fue sorprendentemente fácil y rápido y seguramente me ayudará mucho en el futuro. Si esto fue útil para usted también, por favor sígueme en Facebook y Twitch, y suscribirse a mi canal de Youtube. Además, ¡comparte un comentario más abajo!