С тех пор ответы на этот вопрос стали немного беспорядочными, многие из которых содержат избыточную информацию, а другие - полные неточности. Этот ответ является попыткой упорядочить информацию в этих ответах, устраняя при этом проблемы в них.
Самое главное, стоит иметь в виду, что ответ Грегори, в настоящее время получивший наибольшее количество голосов на этот вопрос, ничем не отличается от использования -ac 2
переключателя - подробнее об этом ниже.
Микширование 5.1-канального аудиопотока в стерео -ac 2
FFmpeg поставляется со встроенными возможностями для микширования дорожки 5.1 в стерео, и это также решение, которое рекомендует собственная документация FFmpeg :
Примечание: ffmpeg интегрирует стандартную систему понижающего микширования (и повышающего микширования), которая должна быть предпочтительнее ( -ac
опция), чем пан-фильтр, если у вас нет особых потребностей.
-ac 2
Переключатель работает путем смешивания пропорции первых 5 каналов из потока 6-канального источника сигналов - задний левый, задний правый, передний левый, передний правый и передний центр - в каналы Передний левый и передний правый в выходной стерео поток:
При этом аудио из канала LFE ( .1 в 5.1, зарезервированное для сабвуфера и используемое для глубоких низкочастотных эффектов) полностью удаляется при использовании этой опции.
К сожалению, мои тесты -ac 2
привели к тому, что общие уровни музыки и диалогов, которые были наиболее отличны от источника, сделали ее формулой понижающего микширования, которая дает худший результат из всех протестированных мной формул, хотя вы можете протестировать его и обнаружить, что он дает вам абсолютно адекватное микширование для ваших нужд, и в этом случае использование любой другой формулы будет излишним для вас.
Чтобы микшировать дорожку DTS -ac 2
без перекодирования (то есть, чтобы сохранить кодек и расширение одинаковыми):
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"
Как отметил Мефисто в своем ответе, если диалог и музыка кажутся вам хорошо сбалансированными друг с другом, но вам просто не хватает громкости, вы можете микшировать поток, одновременно увеличивая его громкость:
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"
Для -vol
коммутатора 100% громкость в источнике эквивалентна целочисленному значению 256, и использование большего значения, чем это, увеличит общую громкость аудиопотока. Тем не менее, обратите внимание, что выполнение этого слишком много может привести к искажению или артефактам, особенно во время его более громких секций.
Для понижающего микширования аудиопотока в стерео и транскодирования его в кодек AC3, например:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
Микширование 5.1-канального аудиопотока в стерео с помощью специального алгоритма микширования
Если вы хотите более качественное микширование с понижением или вы обязательно должны включить поток LFE в свой выход, вы можете использовать переключатель аудиофильтра FFmpeg ( -af
) для микширования звука с использованием пользовательской формулы микширования.
Смешивание с формулой ATSC (ответ Грегори)
На момент публикации этого ответа самым популярным ответом на этот вопрос был Грегори , который помещает формулу из спецификации ATSC (см. Раздел 7.8.2, « Микширование в два канала» ) в аудиофильтр FFmpeg. Эта спецификация непосредственно связана с документацией FFmpeg по этой теме , указывая на то , что она, скорее всего, будет той же самой формулой, которую FFmpeg уже реализует для своего -ac 2
переключателя. Если это правда, то вывод всей формулы в ответе Грегори ничем не отличается от использования -ac 2
переключателя, и, следовательно, трата времени.
Я решил проверить это наверняка, перекодировав одно и то же входное аудио с использованием обоих -ac 2
и -af
фильтра из ответа Грегори (точные используемые команды можно увидеть в сносках к этому ответу).
Затем я сравнил размеры результирующих выходных файлов и обнаружил, что они были побайтово-одинакового размера:
Наконец, я открыл оба выходных файла в Audacity и сравнил их формы сигналов, чтобы убедиться, что они идентичны (нажмите, чтобы увеличить):
Поэтому кажется довольно убедительным, что формула ATSC, подробно описанная в ответе Грегори, является той же самой формулой, которая уже реализована в FFmpeg , и что ее использование полностью избыточно, когда ничего не -ac 2
делает, и является гораздо более громоздкой командой.
Микширование без отбрасывания канала LFE (ответ Dave_750)
Из нескольких включенных в ответы это единственная из формул понижающего микширования, которая, по-видимому, смешивает канал LFE с выходным стерео, а не отбрасывает его полностью, и в результате тот, который обеспечивает наименьшее количество звука от источника, является потерянный.
Общий уровень громкости выше и полнее, чем у вас -ac 2
, но также и ниже, чем у нижестоящего понижающего микширования Nightmode Dialogue. Однако уровни музыки намного ближе к источнику, чем понижающее микширование Nightmode Dialogue, и из-за включения дорожки LFE увеличение громкости вывода при использовании этой формулы понижающего микширования может создать выходной поток, который звучит более правдоподобно для источника 5.1, чем все остальные формулы, которые я проверял.
Если у вас есть такая возможность, я бы настоятельно рекомендовал кодировать ваш аудиопоток, используя как эту формулу понижающего микширования, так и понижающее микширование Nightmode Dialogue, и тщательно сравнивая формы двух сигналов, чтобы определить, какой из них лучше.
Чтобы микшировать дорожку 5.1 в стерео с помощью этой формулы и увеличить ее уровень громкости до 425 (где 256 - это 100% от уровня громкости исходного источника):
ffmpeg -i "sourcetrack.dts" -c dca -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "outputstereo.dts"
Смешивание с диалогом Роберта Кольера в ночном режиме (ответ Шейна Харрельсона)
Формула Nightmode Dialogue, созданная Робертом Коллиером на форуме Doom9 и полученная от Шейна Харрельсона в его ответе, приводит к гораздо лучшему микшированию, чем к -ac 2
переключателю - вместо чрезмерно тихих диалогов она возвращает их к уровням, которые гораздо ближе к источник.
Из описания микса Роберта Кольера:
После преобразования многих дорожек фильмов DTS из 5.1 в 2.0 с использованием eac3to я обнаружил, что сопоставления каналов eac3to по умолчанию приводят к очень тихим диалогам и чрезмерно громкой музыке и сценам действий. Хотя коэффициенты понижающего микширования канала eac3to имеют научную основу, на практике они часто звучат не очень хорошо из-за низкой громкости диалога. Эта предустановка предназначена для тех, кто ищет четкие диалоги, в которых музыка левого и правого каналов все еще слышна, но больше на заднем плане.
Как вы можете видеть - фронтальный центр (диалоги) теперь правильно входит и остается на исходном уровне - в то время как музыка и взрывы остаются фоновым эффектом и не подавляют вас. Этот пресет решает проблему того, что вам приходится постоянно играть с ручкой регулировки громкости при просмотре DTS 5.1, преобразованного в фильмы 2.0, для прослушивания диалогов. (Особенно для просмотра фильмов ночью, когда вы не хотите будить других, но при этом хотите слышать диалоги).
К сожалению, музыка этой формулы понижающего микширования намного ниже, чем в источнике 5.1 (что, вероятно, было задумано с учетом намерения Колльера создать микс «ночной моды»), и из-за полной потери трека LFE общий выходной звук не звучит так же полно или близко к источнику, как формула Dave_750 с повышенной громкостью .
Однако, если по какой-то причине вы хотите избежать увеличения общей громкости потока, то диалог Nightmode, скорее всего, будет вашим лучшим вариантом - хотя, опять же, я бы настоятельно рекомендовал кодировать ваш аудиопоток в оба и тщательно сравнивать формы двух сигналов. ,
Чтобы смешать формулу Nightmode Dialogue в FFmpeg:
ffmpeg -i "sourcetrack.dts" -c dca -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "stereotrack.dts"
Тарк ответ
Этот ответ просто помещает формулу понижающего микширования Nightmode Dialogue из ответа Шейна Харрельсона в команду для преобразования аудиопотока в контейнер MKV. Хотя команда, приведенная в этом ответе, будет нормально работать с таким аудиопотоком, его адаптация к отдельной звуковой дорожке может привести к ошибке:
Фильтрация и потоковое копирование не могут использоваться вместе
Это связано с тем, что аудиокодек не может быть скопирован при понижающем микшировании - как и все другие изменения, которые FFmpeg вносит в выходной поток, понижающее микширование требует повторного кодирования дорожки для применения изменений.
Эта команда также включала избыточный -ac 2
переключатель, который FFmpeg проигнорировал бы.
Тестовые команды
Чтобы продемонстрировать надежность тестов, которые я провел для этого ответа, ниже приведены все команды, которые я использовал для проверки каждой формулы понижающего микширования.
Тестовая команда, используемая для -ac 2
опции:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"
Тестовая команда, использованная для ответа Грегори:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" "Audio 2 (ATSC Algorithm Downmix).wav"
Тестовая команда, использованная для ответа Dave_750:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "Audio 4 (Dave750 Downmix).wav"
Тестовая команда, использованная для ответа Шейна Харрельсона:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "Audio 3 (Nightmode Dialogue Downmix).wav"