С тех пор ответы на этот вопрос стали немного беспорядочными, многие из которых содержали избыточную информацию, а другие - полные неточности. Этот ответ является попыткой упорядочить информацию в этих ответах, устраняя при этом проблемы в них.
Самое главное, стоит помнить, что ответ Грегори - в настоящее время ответ на этот вопрос с наибольшим количеством голосов - ничем не отличается от использования переключателя 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 400 "stereotrack.dts"
Для параметра -vol
100% в источнике эквивалентна целочисленному значению 256, и использование большего значения увеличит общую громкость аудиопотока. Тем не менее, обратите внимание, что слишком много может привести к искажению или появлению артефактов, особенно во время его более громких секций.
Для понижающего микширования аудиопотока в стерео и перекодирования его в кодек AC3, например:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
Микширование 5.1-канального аудиопотока в стерео с помощью специального алгоритма микширования
Если вы протестировали вышеупомянутые решения и решили, что ваш аудиопоток по-прежнему не сбалансирован, как и исходный звук 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. Однако уровни музыки намного ближе к источнику, чем понижающее микширование Nightmode Dialogue, и из-за включения дорожки LFE увеличение громкости выходного сигнала при использовании этой формулы понижающего микширования может создать выходной поток, который звучит более правдоподобно для источника 5.1, чем все остальные формулы, которые я проверял.
Если у вас есть такая возможность, я бы настоятельно рекомендовал кодировать ваш аудиопоток с использованием как этой формулы понижающего микширования, так и понижающего микширования Nightmode Dialogue, а также тщательно сравнивать формы двух сигналов, чтобы определить, какой из них лучше.
Чтобы микшировать дорожку 5.1 в стерео с помощью этой формулы и увеличить ее уровень громкости до 400 (где 256 - это 100% от уровня громкости исходного источника):
ffmpeg -i "sourcetrack.dts" -c dca -af -vol 400 "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"
Если это решение, которое вы в конечном итоге используете, обязательно подтвердите ответ Dave750.
Смешивание с диалогом Роберта Кольера в ночном режиме (ответ Шейна Харрельсона)
Формула 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 проигнорировал бы.
Тестовые команды
Чтобы продемонстрировать надежность тестов, которые я провел для этого ответа, ниже приведены все команды, которые я использовал для проверки каждой формулы понижающего микширования.
Команда test, используемая для опции 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"
Тестовая команда, использованная для ответа Шейна Харрельсона:
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"
Тестовая команда, использованная для ответа Dave_750:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -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"