Как разделить стереозапись на два монофайла через FFmpeg
Команды FFmpeg для левого и правого каналов: выбор аудиодорожки, фильтр pan, сохранение WAV и проверка двух файлов перед расшифровкой.
Проверьте, что именно требуется разделить
Стереозапись может содержать два разных источника, одинаковый сигнал с обеих сторон или пространственную запись одной комнаты. Чтобы получить два монофайла, нужно извлечь каналы выбранной аудиодорожки. Это не то же самое, что выбрать две отдельные дорожки видео или распознать личности участников.
Если ещё не ясно, нужен ли раздельный результат, прочитайте когда моно и стерео полезны для записи речи. Здесь показана техническая операция для уже имеющегося файла: выбор дорожки, извлечение канала и проверка сохранённой копии. Исходник остаётся источником для сравнения.
До команд прослушайте левую и правую стороны по отдельности в удобном плеере или редакторе. Проверьте несколько мест: начало, смену участников и конец. Один канал может быть тихим в начале, но содержать важный ответ позже. Не удаляйте его только по первой минуте.
Если два голоса уже присутствуют с обеих сторон, извлечение даст два таких же смешанных сигнала. Фильтр pan выбирает звуковой канал, а не отделяет речь человека по её содержанию. Не обещайте отдельные файлы ведущего и гостя без фактической проверки устройства записи.
Уточните дорожку, число каналов и расположение файлов
Команды ниже рассчитаны на установленный FFmpeg с доступными ffmpeg и ffprobe в терминале. Проверьте версии командами ffmpeg -version и ffprobe -version. Показанный процесс проверен на FFmpeg 6.1.1 с учебным сигналом; он не является результатом обработки вашей записи.
Положите рабочую копию sample.wav в отдельную папку и откройте терминал в ней. Замените имя на своё; пути с пробелами заключайте в кавычки. Выберите новые имена результатов, чтобы не спутать их с исходником. Параметр -n в примере запрещает перезапись уже существующего выходного файла.
ffprobe -v error -select_streams a -show_entries stream=index,codec_name,sample_rate,channels,channel_layout -of json "sample.wav"
В результате найдите нужную аудиодорожку. Для стерео ожидаются channels: 2 и, если схема определена, channel_layout: stereo. Индекс stream index относится к потоку в контейнере; c0 и c1 в фильтре относятся к каналам внутри выбранного потока. Это разные номера.
Если файл имеет несколько звуковых дорожек, прослушайте нужную и явно выберите её. В показанных командах -map 0:a:0 означает первую аудиодорожку первого входного файла. Для второй аудиодорожки меняют эту часть на 0:a:1, предварительно проверив её параметры. Не считайте первую дорожку автоматически нужной языковой или микрофонной версией.
Для предварительного чтения параметров через графический интерфейс пригодится проверка записи в MediaInfo. Если каналов больше двух или схема неизвестна, не называйте c0 и c1 левым и правым без уточнения. Пример предназначен для подтверждённой стереодорожки.
Сохраните первый и второй каналы отдельными командами
В фильтре pan=mono задаёт один выходной канал. Часть c0=c0 копирует в него первый входной канал, а c0=c1 — второй. Для подтверждённого стерео это левый и правый соответственно. Две команды ниже сохраняют каналы раздельно без их суммирования.
ffmpeg -hide_banner -n -i "sample.wav" -map 0:a:0 -af "pan=mono|c0=c0" -c:a pcm_s24le "sample-left.wav" ffmpeg -hide_banner -n -i "sample.wav" -map 0:a:0 -af "pan=mono|c0=c1" -c:a pcm_s24le "sample-right.wav"
Здесь явно выбран WAV с PCM 24 бит. Это рабочий формат результата, а не обещание повысить качество или сохранить любую исходную разрядность без преобразования. Для источника с большей точностью или плавающей точкой выберите подходящий PCM-кодек отдельно; оригинал не заменяйте.
Фильтр обрабатывает декодированный звук, поэтому не сочетайте этот процесс с -c:a copy. Копирование сжатого потока без декодирования не выполняет показанное извлечение одного канала через фильтр. Если требуется именно неизменённый архив исходника, сохраните его отдельно.
В командах нет обрезки, изменения скорости или удаления тишины. Каналы должны сохранять общий временной ориентир исходной записи. На конкретном файле всё равно проверьте начало и конец: параметры контейнера, выбранная дорожка или последующая обработка способны изменить ожидаемое соответствие.
Проверьте оба результата, а не только сообщение об успехе
После завершения откройте каждый WAV и прослушайте контрольные места. Если вы ожидали отдельный микрофон, убедитесь, что именно он слышен. Не переименовывайте файл именем человека до проверки: левый канал может содержать несколько участников или другой источник.
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels,channel_layout,duration -of json "sample-left.wav" ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels,channel_layout,duration -of json "sample-right.wav"
Проверьте, что каждый результат имеет один канал, ожидаемый формат и разумную длительность. В учебной проверке двухсекундный стереосигнал дал два файла по 2 секунды, каждый с одним каналом. Это подтверждает работу команд на тесте, но не гарантирует содержимое любой записи.
Если оба файла звучат одинаково, проверьте сам исходник: он мог содержать одинаковые каналы. Если второй файл не создаётся, сначала уточните число каналов и текст ошибки. Если программа сообщает о существующем файле, -n выполнил защиту; выберите новое имя или разберитесь с имеющимся результатом, не добавляйте перезапись вслепую.
Не сравнивайте только размер файлов. Два моно WAV могут быть похожего размера при совершенно разном содержании. Сохраните в журнале соответствие «имя исходника — аудиодорожка — номер канала — выходной файл» и результат прослушивания.
Сохраните временную связь для работы с текстом
Если каналы содержат раздельные источники речи, их можно использовать как проверочные копии при работе с расшифровкой. Перед загрузкой проверьте доступный формат и размер файла в текущем интерфейсе сервиса. Не обещайте, что каждый канал автоматически будет подписан именем участника.
Чтобы получить текст аудио в Транскрибаторе, выберите подходящую подготовленную запись и затем сверяйте важные реплики с исходником. Если вы отдельно обрабатываете два канала, сохраните общий отсчёт времени и различайте версии текстов. Номера каналов помогают найти источник, но не подтверждают авторство слов сами по себе.
Не соединяйте две расшифровки простым добавлением одной к другой, если нужен диалог по времени. Реплики обоих файлов относятся к общей временной линии и могут перекрываться. Для итогового текста потребуется отдельная сверка порядка, пауз и одновременной речи.
Архивируйте исходное стерео, обе моно-копии, параметры команды и проверенный текст. Если позже обрежете фрагмент или удалите паузу, запишите сдвиг отдельно. Без этой записи временная отметка в тексте может привести к другому месту источника.
Учебная проверка на двух разных сигналах
Для проверки команд создан двухсекундный PCM 16 бит стереофайл: в первом канале тон 440 Гц, во втором — 880 Гц. Через pan получены два PCM 24 бит моно WAV. После чтения в исходную точность каждый выходной сигнал совпал со своим входным каналом. Это технический учебный тест, а не запись клиентов или замер распознавания.
| Наблюдение | Что проверить | Действие |
|---|---|---|
| Один выходной WAV | Имя и ошибка второй команды | Проверить -n, путь и наличие второго канала |
| Оба результата одинаковы | Содержание левого и правого исходника | Подтвердить, не дублирован ли сигнал |
| В каждом файле два голоса | Реальное распределение микрофонов | Не считать извлечение разделением людей |
| Время реплик не совпадает | Обрезка, паузы и версия файла | Вернуться к общей исходной временной линии |
Проверка показала один канал и 2 секунды в обоих результатах. В реальной записи дополнительно нужны прослушивание речи, правильный выбор аудиодорожки и сохранение связи с исходником. Тоны не проверяют разборчивость диалога или авторство реплик.
Журнал извлечения каналов
Исходник / рабочая копия: FFmpeg и ffprobe / версии: Нужная аудиодорожка / как проверена: Число каналов / схема: Что слышно слева и справа: Первый канал → имя результата: Второй канал → имя результата: Выходной PCM-кодек: Команды / завершение / ошибки: Один канал в каждом результате: Частота и длительность: Начало / середина / конец прослушаны: Общий отсчёт времени сохранён: Имена источников подтверждены или неизвестны: Версии расшифровок / связь с исходником:
Частые вопросы
-ac 1 тоже разделит каналы?
Эта настройка задаёт один выходной канал и не является показанным выбором левой и правой сторон в два файла. Для явного извлечения используйте отдельные отображения через pan.
Почему в команде одновременно 0:a:0 и c0?
0:a:0 выбирает первую аудиодорожку входного файла. c0 обозначает канал внутри неё. Не путайте номер дорожки с номером канала.
Можно оставить -c:a copy?
Фильтр pan требует обработки звука. Показанный результат сохраняется PCM-кодеком; копирование потока не выполняет этот фильтр.
Левый канал всегда принадлежит ведущему?
Нет. Проверьте запись. Канал может содержать другой источник, несколько людей или копию правой стороны.
Команды улучшат качество голоса?
Они извлекают каналы. Увеличение выходной разрядности не возвращает отсутствующие детали и не устраняет шум или перекрывающуюся речь.