У меня есть 2 аудиофайла в формате ac3, и оба содержат только один канал (audio1.ac3 и audio2.ac3)

С другой стороны, у меня есть файл MKV, который содержит видео и 2 аудиопотока (video.mkv)

Аудиопоток 1 в формате ac3 и имеет 4 канала (назовем их L1 R1 C1 LFE1)

Аудиопоток 2 в формате ac3 и тоже имеет 4 канала. (давайте назовем их L2 R2 C2 LFE2)

Я хочу заменить центральный канал в аудиопотоке 1 и аудиопотоке 2, используя файлы ac3, которые я упоминал ранее. В качестве окончательного вывода я хочу файл mkv с этими двумя аудиопотоками:

Audio stream 1 -> L1 R1 (audio1.ac3 as center C1) LFE1

Audio stream 2 -> L2 R2 (audio2.ac3 as center C2) LFE2

Я хотел бы сохранить теги метаданных, которые уже существовали в файле mkv, для названий этих аудиопотоков, и выполнить весь процесс без потери качества и использовать FFmpeg из командной строки (я в Windows, но могу сделать это из Убунту тоже)

Вся информация, которую я нашел, касается полной замены потока, но не на уровне канала. Может быть, это то, что не может быть сделано.

Примечание. Все аудиофайлы имеют одинаковую частоту дискретизации, параметры как потоки в файле mkv.

1 ответ1

1

Замена канала в аудио с использованием внешних аудио файлов

Одним из методов является использование фильтра соединения :

ffmpeg -i input.mkv -i audio1.ac3 -i audio2.ac3 -filter_complex "[0:a:0][1:a]join=inputs=2:channel_layout=5.1:map=0.0-FL|0.1-FR|1.0-FC|0.3-LFE|0.4-BL|0.5-BR[a0];[0:a:1][2:a]join=inputs=2:channel_layout=5.1:map=0.0-FL|0.1-FR|1.0-FC|0.3-LFE|0.4-BL|0.5-BR[a1]" -map 0:v -map "[a0]" -map "[a1]" -c:v copy -c:a flac output.mkv

Я сделал некоторые предположения по поводу заказа канала. Возможно, вам придется настроить. Смотрите ffmpeg -layouts для информации о разметке канала.


Сохранить метаданные теги

Из документации (под опцией -map_metadata ):

По умолчанию глобальные метаданные копируются из первого входного файла, метаданные для каждого потока и главы копируются вместе с потоками / главами.

Вы не предоставили никакой подробной информации о ваших файлах или метаданных (полного вывода ffmpeg -i input.mkv -i audio1.ac3 -i audio2.ac3 было бы достаточно), поэтому я предполагаю, что поведение по умолчанию должно работать.

Без потери качества

Фильтрация требует перекодирования, поэтому в примере используется формат без потерь (flac).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .