Grandes mejoras de rendimiento en la concatenación de audio y video
Recientemente actualizamos nuestros Robots de concatenación de audio y video para usar el demuxer concat de FFmpeg, lo que mejora considerablemente el rendimiento de las Assemblies a las que se aplica este cambio.
Para que las Assemblies aprovechen el nuevo demuxer, los archivos de entrada deben cumplir las siguientes condiciones:
- Usar el mismo formato contenedor (por ejemplo, todos MP4).
- Usar los mismos códecs para sus flujos (por ejemplo, H.264 para video y AAC para audio).
- Tener los mismos parámetros de códec (como la resolución o la frecuencia de fotogramas para video, o la frecuencia de muestreo para audio).

Por qué la concatenación es mucho más rápida
Concatenar con el demuxer concat es mucho más rápido que usar filtros complejos y volver a transcodificar por varias razones:
No se requiere un nuevo encoding
Al usar el demuxer concat con -c copy, FFmpeg no necesita decodificar los flujos
y luego volver a aplicar encoding. Repetir el encoding consume muchos recursos de CPU y puede aumentar
considerablemente el tiempo de ejecución de una Assembly,
especialmente en las Assemblies que procesan video de alta
resolución. Al evitar este paso, el demuxer concat evita aplicar encoding innecesariamente a los
archivos y completa la Assembly mucho más rápido.
Copia directa de datos
El demuxer concat permite, en esencia, que FFmpeg copie directamente los datos multimedia de los archivos de origen al archivo de salida. Como el procesamiento es mínimo (aparte de analizar las cabeceras de los archivos y ajustar las marcas de tiempo), la operación está limitada principalmente por la velocidad de los medios de almacenamiento.
Conserva la calidad
Como no se repite el encoding, tampoco hay pérdida de calidad por artefactos de compresión que podrían introducirse durante el proceso de encoding. Este es un beneficio adicional a la mejora de velocidad.
En cambio, usar filtros complejos o repetir el encoding requiere que FFmpeg decodifique por completo todos los flujos, los procese (lo que podría incluir escalado, filtrado u otras transformaciones) y luego vuelva a aplicar encoding en el formato de destino. Esto no solo lleva más tiempo, sino que también puede degradar la calidad y aumentar el tamaño del archivo.
Este enfoque es similar al de LosslessCut, un editor de video de código abierto creado por nuestro propio Transloadian Mikael Finstad. LosslessCut también usa el demuxer concat de FFmpeg para editar videos rápidamente y sin pérdidas.
Para aprovechar al máximo este cambio, asegúrate de transcodificar primero los archivos de entrada
que difieran entre sí para que usen el mismo contenedor, los mismos códecs de flujo y los mismos
parámetros de códec, incluidas la resolución y la frecuencia de fotogramas del video y la frecuencia
de muestreo del audio. Para obtener el mejor rendimiento en este caso, usa
turbo: true y uno de nuestros
ajustes preestablecidos. Con ambos, puedes reducir considerablemente
el tiempo de ejecución de tus Assemblies existentes.
Si los archivos de entrada ya cumplen todas las condiciones anteriores de coincidencia de contenedor, códecs de flujo y parámetros de códec, no necesitas añadir Steps de encoding adicionales, ya que deberías estar notando las mejoras de rendimiento de forma predeterminada. Sin embargo, si tus archivos pueden diferir en el contenedor, los códecs de flujo o los parámetros de códec (incluidas la resolución, la frecuencia de fotogramas o la frecuencia de muestreo), recomendamos añadir, con el Robot /file/filter, un Step que envíe los archivos que no cumplan estas condiciones a un Step de encoding, para que puedas aprovechar al máximo tus Steps de concatenación posteriores.
