Задание различных профилей aac для разных аудиопотоков в ffmpeg

476
Wally Walters

Я пытаюсь снять видео с двумя аудиопотоками и сжать первый в стереофоническом режиме со скоростью 48 кбит / с с кодированием AAC HEv2, а второй - в монофоническом режиме со скоростью 40 кбит / с с использованием HEv1. Мой код, по сути, выглядит следующим образом:

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 

Но кажется, что программа выполняется только в зависимости от того, какой из двух профилей был указан последним - оба потока либо выходят из HEv1, либо оба выходят из HEv2. Это несомненно потому, что в инструкции профиля пропущен спецификатор потока, но когда я пытаюсь записать параметры профиля в форме "-profile:a:1 aac_he_v2"или "-profile:a:2 aac_he"получаю сообщение об ошибке «Ошибка при открытии кодировщика для выходного потока # 0: 1». Что мне здесь не хватает?

0

1 ответ на вопрос

0
Gyan

aac_he_v2 кодирует стереопотоки, и ваш вариант компоновки канала не подходит для потока.

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  
Спасибо, Малвя, хотя я не совсем уверен, что означает «квалифицированный поток». Что я знаю, так это то, что если я опускаю поток 1 или поток 2 из строки ffmpeg, команда работает, как и ожидалось - то есть я получаю стереопоток с кодировкой he_v2, если удаляю% STREAM_02% или монопоток с he_v1, если я удалю% STREAM_01%. Wally Walters 6 лет назад 0
Параметр, который применяется только к указанному потоку. Gyan 6 лет назад 0
Тогда это говорит о том, что лучше всего будет обрабатывать каждый поток отдельно, а затем в конце выполнить ремукс, что-то вроде `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` И это работает; это просто не так просто. В любом случае, спасибо еще раз. Wally Walters 6 лет назад 0
Я не понимаю; моя команда не работает? Gyan 6 лет назад 0
Виноват; это работает. Произошла ошибка при наборе. Еще раз спасибо. Wally Walters 6 лет назад 0
Одна маленькая поправка, в конце концов, сказано и сделано. Мне нужно было изменить -profile: a на -profile: a: 0 и -profile: a: 1, чтобы получить кодировку HE-v2 и HE_v1 соответственно. Но теперь это прекрасно работает. Wally Walters 6 лет назад 0
Ой, забыл о тех. Gyan 6 лет назад 0

Похожие вопросы