Codifico un archivo de video usando ffmpeg como este.
$ ffmpeg -i input.avi -pass 1 -an output.mp4
$ ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
Entonces escribo siempre 2 veces, ¿hay alguna forma de codificar un video en 2 pasadas a la vez?
Cambio las opciones con frecuencia y, por supuesto, el nombre del archivo de entrada y salida es diferente cada vez.
Respuesta1
En lugar de ejecutarlos como 2 comandos separados, puedes ejecutarlos en una línea de comando así:
$ ffmpeg -i input.avi -pass 1 -an output.mp4 && \
ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
La diferencia es la &&
notación que ejecutará el segundo comando (la segunda pasada) solo si el primer comando fue exitoso. Siguen siendo 2 operaciones separadas, pero esto le permitirá ejecutar una línea de comando en lugar de las 2 que tenía que hacer anteriormente.
Además, esto tendrá el beneficio de ejecutar el segundo pase inmediatamente después de completar el primero, donde a tu manera tendrías que esperar a que termine el primero antes de iniciar el segundo.
Respuesta2
Utilizo mencoder pero estoy seguro de que se podría hacer algo similar con ffmpeg/avconv usando un dispositivo FIFO:
$ mkfifo passlog
$ mencoder infile.flv -passlogfile passlog ........... pass=1 &
$ mencoder infile.flv -passlogfile passlog ........... pass=2