Especificar diferentes perfiles aac para diferentes flujos de audio en ffmpeg

0

Estoy tratando de tomar un video con dos transmisiones de audio y comprimir el primero en estéreo a 48 kbps con codificación AAC HEv2, y el segundo en mono a 40 kbps usando HEv1. Mi código es esencialmente el siguiente:

set STREAM_01=-map 0:a:0 -b:a:0 48000 -ac 2 -c:a:0 libfdk_aac -profile:a aac_he_v2 
set STREAM_02=-map 0:a:1 -b:a:1 40000 -ac 1 -c:a:1 libfdk_aac -profile:a aac_he 
set SPECS=-ar 48000 -sample_fmt s16 -cutoff 20000
ffmpeg.exe -i input.mkv -map 0:v:0 -c:v copy %SPECS% %STREAM_01% %STREAM_02% output.mkv

Pero el programa solo parece ejecutarse cualquiera de los dos perfiles especificados en último lugar: ambas secuencias salen HEv1 o ambas salen HEv2. Sin duda, esto se debe a que la instrucción de perfil omite un especificador de flujo, pero cuando intento escribir las opciones de perfil en el formulario "-profile:a:1 aac_he_v2"o "-profile:a:2 aac_he"recibo un mensaje de error, "Error al abrir el codificador para el flujo de salida # 0: 1". ¿Que me estoy perdiendo aqui?

Wally Walters
fuente

Respuestas:

0

aac_he_v2 codifica transmisiones estéreo y la opción de diseño de su canal no está calificada para transmisión.

set STREAM_01=-map 0:a:0 -b:a:0 48000 -ac:a:0 2 -c:a:0 libfdk_aac -profile:a:0 aac_he_v2 
set STREAM_02=-map 0:a:1 -b:a:1 40000 -ac:a:1 1 -c:a:1 libfdk_aac -profile:a:1 aac_he 
Gyan
fuente
Gracias, Mulvya, aunque no estoy completamente seguro de lo que significa "calificado para transmisión". Lo que sí sé es que si omito la transmisión 1 o la transmisión 2 de la línea ffmpeg, el comando funciona como se esperaba, es decir, obtengo una transmisión estéreo con codificación he_v2 si elimino% STREAM_02% o una transmisión mono con he_v1 si elimino% STREAM_01%.
Wally Walters
Una configuración que se aplica solo a la secuencia especificada.
Gyan
Entonces eso sugiere que mi mejor opción sería procesar cada transmisión por separado y luego remux al final, algo así como ffmpeg.exe -i -map 0:v -c:v copy -an "VIDEO_01.mkv" ffmpeg.exe -i input.mkv -vn %SPECS% %STREAM_01% AUDIO_01.m4a ffmpeg.exe -i input.mkv -vn %SPECS% %STREAM_02% AUDIO_02.m4a ffmpeg.exe -i VIDEO_01.mkv -i AUDIO_01.m4a -i AUDIO_02.m4a -map 0 -map 1 -map 2 -c copy output.mkv Y funciona; simplemente no es tan sencillo. En cualquier caso, gracias de nuevo.
Wally Walters
No entiendo; ¿Mi comando no funcionó?
Gyan
Mi error; funciona Hubo un error en mi escritura. De nuevo, gracias.
Wally Walters