Есть ли способ (автоматически) определить, не совпадают ли каналы стереовидео/аудио по фазе и подавляют друг друга?

Фон

Я столкнулся с проблемой при попытке конвертировать аудио, загруженное из видео YouTube, в моноформат .wav с помощью ffmpeg. Несмотря на использование типичных команд преобразования (код ниже), полученный звук либо тихий, либо поврежден, что указывает на потенциальное удаление стереоканала. Я попытался загрузить звук в Python и вычислить фазу и взаимную корреляцию, но этот шаг требует много памяти, особенно для 6-часового звука.

Цель

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

Вопрос:

Как я могу автоматически определить, гасят ли стереоканалы друг друга, и впоследствии инвертировать фазу, чтобы обеспечить успешное преобразование в моно с помощью ffmpeg? Будем очень признательны за любые идеи, решения или альтернативные подходы.

Предпринятые шаги:

  1. Скачал аудио с YouTube с помощью yt-dlp.
  2. Попытка конвертировать звук в моно с помощью ffmpeg, что привело к тишине или повреждению звука.
  3. Успешно конвертировал звук в моно, вручную инвертировав фазу одного канала перед преобразованием.

Скачать аудио с ютуба

yt-dlp -f bestaudio https://thewikihow.com/video_s3QB_rJzH08 -o input.webm

Преобразование аудио

Полученный файл неактивен или поврежден.

ffmpeg -i input.webm  -ac 1 -ar 16000 -c:a pcm_s16le output.wav

Преобразование звука в моно .wav с инверсией фазы

В полученном файле есть звук.

ffmpeg -i input.webm -af "aeval=val(0)|-val(1)" -ac 1 -ar 16000 -c:a pcm_s16le output.wav

это не сдвиг фазы/фазы (феномен во времени), это инверсия (феномен в амплитуде/пространстве). есть разница в значении, хотя большинству людей все равно.

Christoph Rackwitz 08.03.2024 10:35

@ChristophRackwitz круто, спасибо! Есть какие-нибудь советы о том, как обнаружить инверсию?

Rhenan Bartels 08.03.2024 12:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

FFmpeg имеет фильтр обнаружения разности фаз.

ffmpeg -i input.webm -af "aphasemeter=video=0:phasing=1:angle=90:duration=1:tolerance=0.001,ametadata=print:file=aphase.log" -vn -f null -

Файл aphase.log будет содержать покадровый журнал разности фаз в формате

frame:17302 pts:19931904 pts_time:451.971
lavfi.aphasemeter.phase=0.224391

Значение фазы может находиться в диапазоне от -1 до +1. -1 означает, что каналы полностью не совпадают по фазе, а 1 означает, что каналы находятся в фазе.

Если каналы не совпадают по фазе, ffmpeg также напечатает сводные показания в журнале консоли.

Большое спасибо @gyan! Я проверю значение параметров в документации. Знаете ли вы, смогу ли я рассчитать фазу, скажем, каждые 300 секунд?

Rhenan Bartels 08.03.2024 18:07

Другие вопросы по теме