Durante mucho tiempo he usado un script que hace concatenación para diferentes códecs usando filtros complejos como se describe aquí .
Este wiki da el siguiente comando de ejemplo:
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
Mi problema es que si tienes muchos clips pequeños que necesitan combinarse de esta manera, esto se escalará desastrosamente.
Si bien para este ejemplo parece que el filtro complejo es el causante de problemas, la presión para esto puede reducirse a una carga constante mediante el uso de -filter_complex_script
que pone toda la cadena de filtro en un archivo externo, que se escala perfectamente.
Por lo tanto, el único problema que queda son los archivos de entrada. No alcanzaría este límite con tanta facilidad si no estuviera limitado por las diferentes rutas y los largos nombres de archivos generados automáticamente, pero esos están fuera de mi control para cambiar. Desafortunadamente, mi situación ha crecido hasta donde los 8,000 caracteres impares que Windows me ofrece no son suficientes.
Entonces, lo que busco es (aproximadamente) algo así como un script de archivo de entrada. He visto menciones de la concat demuxer Eso tiene algo en ese sentido, pero no puedo entender cómo funcionaría. Por lo que puedo decir, tiraría todo en una sola entrada de archivo y haría imposible ejecutar la concatenación de script de filtro complejo. Sin mencionar: el enlace wiki anterior menciona claramente que debe ser el mismo códec, base de tiempo, etc. para todos los archivos, lo que no se aplica a mi situación.
¿Cómo me deshago de mis preocupaciones sobre la longitud de la línea de comando y me olvido para siempre de lo que se conoce como limitaciones de caracteres en la línea de comando?
fuente
Respuestas:
Un enfoque sería cambiar la limitación. Podría funcionar hasta cierto punto.
Esta respuesta dice:
El valor en Cygwin es relativamente bajo (sospecho que alguna de las limitaciones de Windows puede ser la causa), pero sigue siendo cuatro veces mayor que las 8000 que mencionó. No se el valor de
ARG_MAX
en el subsistema de Windows para Linux.Un paso más sería correr
ffmpeg
en (posiblemente virtual) Linux.fuente