Відповіді на це питання з тих пір стали безладно, багато хто містить зайву інформацію, а інші - повні неточності. Ця відповідь - це спроба впорядкувати інформацію в цих відповідях, усуваючи проблеми, що виникають у них.
Найголовніше, що варто пам’ятати, що відповідь Григорія, наразі відповідача на це запитання, не відрізняється від використання -ac 2
перемикача - докладніше про це нижче.
Перемішування 5.1-канального аудіо потоку в стерео -ac 2
FFmpeg оснащений вбудованими можливостями для змішування доріжки 5.1 на стерео, і це також рішення, яке рекомендує власна документація FFmpeg :
Примітка: ffmpeg інтегрує систему за замовчуванням (і вище-суміш) за замовчуванням, якій слід віддати перевагу ( -ac
опція) над панорамним фільтром, якщо у вас немає особливих потреб.
-ac 2
Перемикач працює шляхом змішування пропорції перших 5 каналів з потоку 6-канального джерела сигналів - задній лівий, задній правий, передній лівий, передній правий і передній центр - в канали Передній лівий і передній правий в вихідний стерео потік:
При цьому, звук з каналу низькочастотних ефектів ( 0,1 в 5.1, зарезервованих для сабвуфера і використовується для глибокого, низькочастотних ефектів) буде відкинутий повністю при використанні цієї опції.
На жаль, у моїх тестах -ac 2
призвели до загального рівня як музики, так і діалогу, які найбільше відрізнялися від джерела, завдяки чому формула downmix дає найгірший результат з усіх тестованих формул, хоча ви можете перевірити його і виявити, що це дає вам абсолютно адекватний нижній мікс для ваших потреб, і в цьому випадку використання будь-якої іншої формули буде для вас непосильним.
Щоб змішувати доріжку 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 канали до стереосистеми за допомогою спеціального алгоритму поєднання
Якщо ви хочете отримати більш якісний downmix, або ви абсолютно повинні включити потік LFE у свій вихід, ви можете використовувати перемикач звукового фільтра FFmpeg (-af
) для зменшення звуку за допомогою спеціальної формули суміші.
Даймінг за формулою ATSC (відповідь Григорія)
На момент опублікування цієї відповіді, голосовою відповіддю на це запитання була Грегорі , яка формулює формулу зі специфікації ATSC (див. Розділ 7.8.2, Downmixing у два канали ) в аудіо фільтр FFmpeg. Ця специфікація безпосередньо пов'язана з документацією FFmpeg по цій темі , вказуючи на те, що велика ймовірність, що це така ж формула, яку FFmpeg вже реалізує для своєї -ac 2
комутації. Якщо це правда, то введення всієї формули у відповіді Грегорі не відрізнятиметься від використання-ac 2
перемикача, а отже, марна трата часу.
Я вирішив перевірити це напевно, перекодувавши один і той же вхідний аудіо за допомогою обох -ac 2
і-af
фільтр з відповіді Грегорі (точні використовувані команди можна побачити у виносках до цієї відповіді).
Потім я порівняв розміри отриманих вихідних файлів і виявив, що вони, байт-байт, однакового розміру:
Нарешті, я відкрив обидва вихідні файли в Audacity і порівняв їхні форми сигналів, щоб підтвердити, що вони однакові (натисніть для збільшення):
Тому здається доволі переконливим, що формула ATSC, детально описана у відповіді Грегорі, та сама, яка вже була реалізована FFmpeg , і що використання її є абсолютно зайвим, коли вона нічого -ac 2
не робить, і є набагато більш громіздкою командою.
Даймінг без відкидання каналу LFE (відповідь Dave_750)
З декількох, включених у відповіді, це єдина з формул downmix, яка, як видається, змішує канал LFE у вихідний стерео, а не відкидає його повністю, і як результат, та, яка забезпечує найменший звук від джерела, загублений.
Загальний рівень гучності є вищим і повнішим, ніж загальний -ac 2
, але також все-таки нижчий ніж нижній змішаний діалог Nightmode Dialogue. Однак рівні музики набагато ближче до джерела, ніж нижній зміст Nightmode Dialogue Downmix, і завдяки включенню доріжки LFE, збільшення гучності виводу при використанні цієї формули downmix може створити вихідний потік, який звучить вірніше джерела 5.1, ніж усі інші формули, які я перевірив.
Якщо у вас є можливість, я б настійно рекомендував кодувати свої аудіо потоки, використовуючи формулу downmix та downmix 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"
Даймінг з діалогом Нічного режиму Роберта Коллієра (відповідь Шейна Харрелсона)
Діалог формула нічного режиму , створений Роберт Collier на doom9 форумі і джерела Шейна Харрельсон в своїй відповіді, призводить до набагато краще , ніж понижувальної-ac 2
перемикач - замість того , щоб занадто тихі діалоги, він повертає їх до рівнів, які набагато ближче до джерело.
Із опису суміші Роберта Колєра:
Перетворивши багато треків фільмів DTS з 5.1 в 2.0 за допомогою eac3to, я знайшов відображення каналів eac3to за замовчуванням, що призводить до дуже тихих діалогів та надмірно гучної сцени музики та дій. Хоча коефіцієнти зниження рівня каналу eac3to мають наукову основу, вони часто не здаються гарними на практиці, оскільки вони мають низький об'єм діалогу. Цей параметр призначений для тих, хто шукає чітких діалогів, коли музика зліва та правого каналу все ще чутна, але більше у фоновому режимі.
Як бачите - передній центр (діалоги) входять зараз належним чином і залишаються на початковому рівні - тоді як музика та вибухи залишаються фоновим ефектом і не пересилюють вас. Цей попередньо встановлений варіант вирішує проблему, коли вам потрібно постійно возитися з регулювачем гучності під час перегляду DTS 5.1, перетвореного на фільми 2.0, щоб почути діалоги. (Особливо для перегляду фільмів у нічний час, коли ви не хочете будити інших, але все ще хочете мати можливість чути діалоги).
На жаль, музика цієї формули downmix набагато нижча, ніж у джерелі 5.1 (що, ймовірно, за дизайном, враховуючи намір Колєра створити мікс "nightmode") і через повну втрату треку LFE, загальний вихідний аудіо не відповідає звук як повний або близький до джерела, як формула Dave_750 з підвищеною гучністю .
Однак якщо ви з якоїсь причини хочете уникнути збільшення загального обсягу потоку, то діалог Nightmode, швидше за все, стане найкращим варіантом - хоча, знову ж таки, я б настійно рекомендував кодувати ваш аудіопотік обом і ретельно порівнювати форми хвиль двох. .
Щоб перемогти з допомогою формули діалога Nightmode у 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 downmix з відповіді Шейна Харрелсона в команду для перетворення звукового потоку в контейнер MKV. Хоча команда, дана у цій відповіді, буде добре працювати на такому аудіопотоці, адаптування її до окремої аудіодоріжки призведе до помилки:
Фільтр та потокове копіювання не можна використовувати разом
Це тому, що аудіокодек не може бути скопійований під час змішування - як і всі інші зміни, які FFmpeg вносить у вихідний потік, downmix вимагає повторного кодування доріжки для застосованих змін.
Ця команда також включала надмірний -ac 2
перемикач, який FFmpeg ігнорував би.
Тестові команди
Щоб продемонструвати надійність тестів, які я проводив для цієї відповіді, нижче наведені всі команди, які я використовував для тестування кожної формули downmix.
Команда тесту, що використовується для -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"