18

У меня есть аудиодорожка 5.1 из фильма, в которой передний левый и правый передний содержат музыку, а центральный содержит диалог. Воспроизведение дорожки 5.1 в VLC прекрасно сочетает все вместе.

Я пытаюсь преобразовать дорожку 5.1 в стерео с помощью ffmpeg -ac 2 , однако получаемый стерео микс имеет гораздо более слабую громкость, чем естественное воспроизведение дорожки 5.1.

Добавление -af "pan=stereo|c0=FL|c1=FR" дает правильную громкость, но тогда диалог отсутствует, поскольку центральный канал не включен.

Таким образом, решение может заключаться в том, чтобы смешать левый / центральный / правый стерео и выбросить внутренние каналы сабвуфера? (Я думаю, здесь ...)

Итак, вопрос: как мне сделать ffmpeg downmix 5.1 для стерео так же, как это делает VLC, с такой же сильной громкостью в конечном результате?

6 ответов6

22

Я нашел ответ, предоставленный Шейном, чтобы предоставить слишком мало других каналов и слишком много центра. Фильмы с наушниками звучат неуравновешенно, со всеми диалогами и не хватает фоновой музыки / эффектов.

В соответствии со стандартами ATSC (раздел 7.8, стр. 91), следующая формула используется для понижающего микширования 5.1 в обычное стерео (в отличие от матрицы):

Lo = 1.0 * L + clev * C + slev * Ls ;
Ro = 1.0 * R + clev * C + slev * Rs ;

clev и slev должны быть 0,707, в соответствии с таблицами 5.9 и 5.10 в вышеупомянутом документе, предполагая, что уровень микширования центра / объемного звучания равен 0. Другие значения приведены в этих таблицах, что уменьшает количество центральных миксов, что я не считаю полезным.

Имея это в виду, следующая опция ffmpeg создает хороший сбалансированный звук со слышимым диалогом. Обратите внимание, что указывать аудиоканалы не обязательно.

-af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR"

Примечание об использовании символа «меньше» из документации по фильтру панорамирования:

Если '=' в спецификации канала будет заменено на '<', то усиления для этой спецификации будут перенормированы, так что общее значение будет равно 1, что позволит избежать шума ограничения.

10

Попробуйте это микширование:

-ac 2 -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" 

как предложено в:
Предварительная настройка понижающего микширования в ночном режиме диалога для стерео ATS от 5.1 DTS до 2.0 с использованием ffmpeg и qaac

5

Итак, объединив @Shane Harrelson's с ответом @Jordan Harris на другой вопрос - с включенным ленивым режимом - вот что нужно для преобразования input_51.mkv (5.1) в output_stereo.mkv (стерео):

ffmpeg -i input_51.mkv -c:v copy \
    -ac 2 -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" \
    output_stereo.mkv

-c:v copy часть означает , что видеопоток не трогает (я предполагаю , что параметры с odec v IDEO в настоящее время полицейской СВОЙ). Без этого это займет гораздо больше времени. Просто повторяя приведенный выше ответ для завершенности, -ac 2 означает два аудиоканала, а -af - звуковой фильтр.

Посмотрев немного на команду, я понял, что она устанавливает, как составляются два стереоканала; FL (передний левый канал) берется из исходного FC (передний центр) плюс 0.30*FL (30% от переднего левого) плюс 0.30*BL (30% от заднего левого) и так далее.

2

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

Самое главное, стоит помнить, что ответ Грегори - в настоящее время ответ на этот вопрос с наибольшим количеством голосов - ничем не отличается от использования переключателя 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"
1

Если опция -ac 2 дает сбалансированное микширование, при котором ни музыка, ни речь не звучат слишком сильно, чем другие компоненты, вам просто нужно увеличить громкость с помощью

-vol 512

Я использовал 512 в примере, который увеличивает звук, делая его в два раза громче. Правило гласит, что 256 соответствует 100%

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

0

Сейчас это старый вопрос, но он указал мне верное направление и хотел поделиться своим результатом. Слегка следуя ответу Григория:

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

Помещение половины FC и LFE в левый и правый дает в общей сложности 1 для их эффективной громкости от обоих громкоговорителей. Использование .707 * Front/Back Left/Right понижает эти каналы до хорошего уровня, чтобы они не подавляли центр.

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