Estoy tratando de encontrar información sobre cómo transcodificar un archivo en múltiples salidas de una sola vez , pero parece que no puedo. La mayoría de los resultados que encuentro describen lo contrario: fusionar múltiples archivos en uno.
Aquí está la situación:
Tengo una cámara web IP que toma un "volcado" o captura sin formato (aunque no me gusta decir 'sin formato' porque puede confundirse con el formato .raw) que consta de dos secuencias: un video H264 y un audio PCM .
Necesito transcodificar esa captura "sin formato / volcado" en tres archivos MP4, dos de ellos con audio y video (H264 + AAC) y el tercero solo con el audio AAC; más específicamente:
Un archivo con la misma resolución que el original, asegurando que se ejecuta a 30 fps, tiene un audio a 128kbps y el formato de píxel es yuv420p (el formato de píxel de la secuencia de video "volcado" es yuvj420p, lo que hace que la transmisión no se pueda reproducir directamente en Chrome. .. por ahora).
Un archivo con las mismas características que el anterior, pero la mitad de la resolución.
- Un archivo que contiene solo el audio AAC.
Tengo el comando para hacer que el primer archivo funcione bastante bien (aunque alguien tiene algún comentario para ese, también será muy apreciado):
/usr/bin/avconv "/home/borrajax/Videos/original.dump" \
-acodec libvo_aacenc -ac 1 -ab 128k -ar 44100 \
-vcodec libx264 -preset fast -r 30 -pix_fmt yuv420p \
"/home/borrajax/Videos/transcoded.mp4"
Probablemente podría guardar algunas de las opciones, pero el problema es que la configuración de la cámara se puede modificar, por lo que debo asegurarme de que el .mp4 resultante tenga el formato que necesito (es por eso que especifiqué tantos)
Supongo que probablemente sea una buena idea (digo "probablemente" porque no sé mucho sobre codificación de video) intentar transcodificar los tres archivos de una sola vez, reutilizando los datos transcodificados para ahorrar tiempo.
Por ejemplo: el video con la mitad de resolución que el original tendrá exactamente el mismo audio que el "grande", por lo que no es necesario volver a codificarlo. Obviamente, lo mismo ocurre con el archivo de audio. No debería ser necesario transcodificar tres veces. Además, tal vez (y aquí, no sé qué será mejor) también puedo reutilizar la transmisión de video. Como necesito dos videos con un formato de píxel y fps diferente al original, tal vez valga la pena transcodificar solo una vez (como ya estoy haciendo en el comando anterior) y luego tomar esa transmisión de video que ya tiene formato de píxel de 30 fps y yuv420p y simplemente hacer su resolución a la mitad.
Supongo que será una buena idea resumir ... ¿cómo puedo encadenar (canalizar) múltiples salidas con avconv, aplicando diferentes opciones a cada una?
Utilizando:
- Ubuntu 12.04 LTS
- avconv versión 0.8.5-4: 0.8.5-0ubuntu0.12.04.1
fuente
libvo_aacenc
produce AAC de bastante mala calidad.libfdk_aac
olibfaac
debería ser preferido.Respuestas:
Probablemente, la forma más eficiente de hacer esto sin duplicar el esfuerzo sería con un script que hace varias cosas y luego silencia los resultados para hacer los archivos finales.
Por ejemplo:
transcodificar audio del original al resultado AAC en audio.aac
transcodifique video de original a resolución completa en temp-full-vid.mp4
transcodifique el video del original al resultado medio en temp-half-vid.mp4
mux temp-full-vid.mp4 y audio.aac en full.mp4
mux temp-half-vid.mp4 y audio.aac en half.mp4
eliminar temp-full-vid.mp4 y temp-half-vid.mp4
Esto te deja con los 3 archivos full.mp4, half.mp4 y audio.aac que estás buscando sin rehacer innecesariamente la transcodificación.
fuente
avconv
, pero deberían funcionar en la últimaffmpeg
. En caso de problemas, los usuarios deben compilar el FFmpeg real desde la fuente.