У меня есть аудиодорожка 5.1 из фильма, в которой передний левый и правый передний содержат музыку, а центральный содержит диалог. Воспроизведение дорожки 5.1 в VLC прекрасно сочетает все вместе.
Я пытаюсь преобразовать дорожку 5.1 в стерео с использованием ffmpeg -ac 2
, однако получаемый стерео микс имеет гораздо более слабую громкость, чем естественное воспроизведение дорожки 5.1.
Добавление -af "pan=stereo|c0=FL|c1=FR"
дает правильную громкость, но тогда нет диалога, потому что центральный канал не включен.
Таким образом, решение может заключаться в том, чтобы смешать левый / центральный / правый стерео и выбросить внутренние каналы сабвуфера? (Я думаю, здесь ...)
Итак, вопрос: как мне сделать ffmpeg downmix 5.1 для стерео так же, как это делает VLC, с такой же сильной громкостью в конечном результате?
-ac 2
. Поэтому я спрашиваю, как заставить ffmpeg генерировать такой же хороший результат, как VLC.Ответы:
Я нашел ответ, предоставленный Шейном, чтобы предоставить слишком мало других каналов и слишком много центра. Фильмы с наушниками звучали несбалансированно, со всеми диалогами и отсутствием фоновой музыки / эффектов.
В соответствии со стандартами ATSC (раздел 7.8, стр. 91), следующая формула используется для понижающего микширования 5.1 в обычное стерео (в отличие от матрицы):
clev и slev должны быть 0,707, в соответствии с таблицами 5.9 и 5.10 в вышеупомянутом документе, предполагая, что уровень микширования центра / объемного звучания равен 0. Другие значения приведены в тех таблицах, которые уменьшают количество микса центра, который я не нахожу полезно.
Имея это в виду, следующая опция ffmpeg создает хороший сбалансированный звук со слышимым диалогом. Обратите внимание, что указывать аудиоканалы не обязательно.
Примечание об использовании символа «меньше» из документации по фильтру панорамирования :
источник
ac -2
переключателем. Другими словами, единственное различие между использованием этого фильтра и выполнениемac -2
- намного больше печатания.С тех пор ответы на этот вопрос стали немного беспорядочными, многие из которых содержат избыточную информацию, а другие - полные неточности. Этот ответ является попыткой упорядочить информацию в этих ответах, устраняя при этом проблемы в них.
Самое главное, стоит иметь в виду, что ответ Грегори, в настоящее время получивший наибольшее количество голосов на этот вопрос, ничем не отличается от использования
-ac 2
переключателя - подробнее об этом ниже.Микширование 5.1-канального аудиопотока в стерео
-ac 2
FFmpeg поставляется со встроенными возможностями для микширования дорожки 5.1 в стерео, и это также решение, которое рекомендует собственная документация FFmpeg :
-ac 2
Переключатель работает путем смешивания пропорции первых 5 каналов из потока 6-канального источника сигналов - задний левый, задний правый, передний левый, передний правый и передний центр - в каналы Передний левый и передний правый в выходной стерео поток:При этом аудио из канала LFE ( .1 в 5.1, зарезервированное для сабвуфера и используемое для глубоких низкочастотных эффектов) полностью удаляется при использовании этой опции.
К сожалению, мои тесты
-ac 2
привели к тому, что общие уровни музыки и диалогов, которые были наиболее отличны от источника, сделали ее формулой понижающего микширования, которая дает худший результат из всех протестированных мной формул, хотя вы можете протестировать его и обнаружить, что он дает вам абсолютно адекватное микширование для ваших нужд, и в этом случае использование любой другой формулы будет излишним для вас.Чтобы микшировать дорожку DTS
-ac 2
без перекодирования (то есть, чтобы сохранить кодек и расширение одинаковыми):Как отметил Мефисто в своем ответе, если диалог и музыка кажутся вам хорошо сбалансированными друг с другом, но вам просто не хватает громкости, вы можете микшировать поток, одновременно увеличивая его громкость:
Для
-vol
коммутатора 100% громкость в источнике эквивалентна целочисленному значению 256, и использование большего значения, чем это, увеличит общую громкость аудиопотока. Тем не менее, обратите внимание, что выполнение этого слишком много может привести к искажению или артефактам, особенно во время его более громких секций.Для понижающего микширования аудиопотока в стерео и транскодирования его в кодек 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% от уровня громкости исходного источника):
Смешивание с диалогом Роберта Кольера в ночном режиме (ответ Шейна Харрельсона)
Формула Nightmode Dialogue, созданная Робертом Коллиером на форуме Doom9 и полученная от Шейна Харрельсона в его ответе, приводит к гораздо лучшему микшированию, чем к
-ac 2
переключателю - вместо чрезмерно тихих диалогов она возвращает их к уровням, которые гораздо ближе к источник.Из описания микса Роберта Кольера:
К сожалению, музыка этой формулы понижающего микширования намного ниже, чем в источнике 5.1 (что, вероятно, было задумано с учетом намерения Колльера создать микс «ночной моды»), и из-за полной потери трека LFE общий выходной звук не звучит так же полно или близко к источнику, как формула Dave_750 с повышенной громкостью .
Однако, если по какой-то причине вы хотите избежать увеличения общей громкости потока, то диалог Nightmode, скорее всего, будет вашим лучшим вариантом - хотя, опять же, я бы настоятельно рекомендовал кодировать ваш аудиопоток в оба и тщательно сравнивать формы двух сигналов. ,
Чтобы смешать формулу Nightmode Dialogue в FFmpeg:
Тарк ответ
Этот ответ просто помещает формулу понижающего микширования Nightmode Dialogue из ответа Шейна Харрельсона в команду для преобразования аудиопотока в контейнер MKV. Хотя команда, приведенная в этом ответе, будет нормально работать с таким аудиопотоком, его адаптация к отдельной звуковой дорожке может привести к ошибке:
Это связано с тем, что аудиокодек не может быть скопирован при понижающем микшировании - как и все другие изменения, которые FFmpeg вносит в выходной поток, понижающее микширование требует повторного кодирования дорожки для применения изменений.
Эта команда также включала избыточный
-ac 2
переключатель, который FFmpeg проигнорировал бы.Тестовые команды
Чтобы продемонстрировать надежность тестов, которые я провел для этого ответа, ниже приведены все команды, которые я использовал для проверки каждой формулы понижающего микширования.
Тестовая команда, используемая для
-ac 2
опции:Тестовая команда, использованная для ответа Грегори:
Тестовая команда, использованная для ответа Dave_750:
Тестовая команда, использованная для ответа Шейна Харрельсона:
источник
-ac 2
дало мне худший результат для начала, что вызвало первоначальную публикацию. Я попробую это снова и, если возможно, поделюсь отрывком 5.1, который не дает удовлетворительного результата со встроенным микшированием. Также очень приятно знать, что вы можете микшировать без перекодирования!ac -2
Вариант дал мне самую худшую результат всех понижающего микширования формул тоже, я думаю , что это просто провал формулы стандартной ATSC в.ffmpeg -i 5.1.mp4 -ac 2 2.mp4
работает, ноffplay -i 5.1.mp4 -ac 2
не работает.Попробуйте это микширование:
как предложил Роберт Коллиер на форуме Doom9.
источник
Итак, объединив @Shane Harrelson's с ответом @Jordan Harris на другой вопрос - с включенным ленивым режимом - вот что нужно для преобразования
input_51.mkv
(5.1) вoutput_stereo.mkv
(стерео):В
-c:v copy
части означает , что видеопоток не тронули (я предполагаю , что v IDEO с odec настройки в настоящее время полицейский СВУ). Без этого это займет гораздо больше времени. Просто повторение приведенного выше ответа для полноты-ac 2
означает два аудиоканала и-af
указывает аудио-фильтр.Посмотрев немного на команду, я понял, что она устанавливает, как составляются два стереоканала;
FL
(передний левый канал) берется из оригиналаFC
(передний центр) плюс0.30*FL
(30% от переднего левого) плюс0.30*BL
(30% от задней левой) и так далее.источник
Это старый вопрос, но он указал мне верное направление и хотел поделиться своим результатом:
Помещение половины FC и LFE в левый и правый дает в общей сложности 1 для их эффективной громкости от обоих громкоговорителей. Использование .707 * Front / Back Left / Right понижает эти каналы до хорошего уровня, чтобы они не подавляли центр.
источник
Если опция -ac 2 дает вам сбалансированное микширование, при котором ни музыка, ни речь не звучат слишком сильно, чем другие компоненты, вам просто нужно увеличить громкость с помощью
Я использовал 512 в примере, который увеличивает звук, делая его в два раза громче. Правило гласит, что 256 соответствует 100%
Не переусердствуйте со значением и обязательно проверьте результаты в тех частях фильма со взрывами или громким шумом. Очень легко ввести искажение, используя слишком высокое значение.
источник
-AC 2
Объем каналов в понижающем микшировании неизменен с помощью кодека с плавающей запятой -> pcm_f32le, aac
Объем в понижающем микшировании (от 5,1 до 2,0 без LFE) уменьшается на 1 / 2,5 = -7,96 дБ с целочисленным кодеком -> pcm_s16le, libfdk_aac
В фильмах звук направлен в одном направлении, и нет максимального звукового давления на всех каналах. Таким образом, уменьшенная громкость понижающего микширования является неправильной, малоуровневое сжатие является правильным способом. Это то, что делает Долби.
источник
Прочитав всю эту страницу и проведя некоторые эксперименты, я разработал сценарий под названием «down_mix»:
Настройте переменные выше по своему вкусу. У меня не было проблем с низким уровнем громкости, поэтому я оставил это, но легко добавил.
источник
Фильтр ffmpeg "-ac 2" работает нормально, если ваша цель закодирована в pcm_s16le. При кодировании в pcm_f32le в формате wav громкость увеличивается на 9 дБ и более. Следовательно: не используйте фильтр «-ac 2» в таких случаях.
источник