Введение
Обработка аудио — важная часть многих приложений: от генерации звуковых эффектов и редактирования подкастов до голосовых ассистентов и мультимедийных систем. В языке Python одним из наиболее универсальных и мощных инструментов для этих задач является библиотека pydub
.
pydub
позволяет выполнять такие задачи, как обрезка, склейка, конвертация аудиофайлов, наложение эффектов, изменение громкости и даже воспроизведение звука. При этом библиотека остаётся простой в использовании и интуитивно понятной.
В этой статье мы подробно разберём pydub
, её возможности, методы, типичные сценарии использования, частые ошибки, а также интеграцию с другими библиотеками (включая ffmpeg
).
Основная часть
Установка и настройка pydub
Установка библиотеки через pip:
pip install pydub
Установка ffmpeg (обязательно):
-
Windows: загрузите ffmpeg.exe и добавьте в PATH
-
Linux/macOS:
sudo apt install ffmpeg
pydub
используетffmpeg
для чтения и сохранения большинства форматов
Основы работы с pydub
Импорт и загрузка аудиофайла
from pydub import AudioSegment
sound = AudioSegment.from_file("audio.mp3")
Поддерживаемые форматы:
-
mp3
-
wav
-
ogg
-
flv
-
wma
-
m4a
Получение информации:
print(f"Длительность: {len(sound)} мс")
print(f"Громкость: {sound.dBFS} дБ")
Манипуляции с аудиофайлами
Обрезка звука:
cut = sound[1000:3000] # с 1 до 3 секунды
Склейка:
combined = sound + cut
Повторение:
looped = sound * 3
Изменение громкости:
quieter = sound - 10
louder = sound + 6
Сведение двух дорожек:
overlayed = sound.overlay(AudioSegment.from_file("beep.wav"))
Применение эффектов и фильтров
-
Fade in/out:
faded = sound.fade_in(2000).fade_out(3000)
-
Изменение скорости (с
pydub.playback
илиffmpeg
)
Экспорт аудио
sound.export("output.wav", format="wav")
Дополнительно можно указать битрейт, каналы, sample_rate:
sound.export("out.mp3", format="mp3", bitrate="192k")
Воспроизведение
Для воспроизведения используется play()
:
from pydub.playback import play
play(sound)
Под капотом
play()
использует системные плееры илиsimpleaudio
,pyaudio
,ffplay
Частые ошибки
-
Couldn’t find ffmpeg
— не установлен или не в PATH -
FileNotFoundError
— ошибка пути -
ValueError: Decoding failed
— не поддерживается формат
Практические кейсы
Автоматическое нормализованное склеивание подкастов
Создание аудиокниг из фрагментов
Выделение фрагментов с паузами и экспорт
Ограничения pydub
-
Не обрабатывает потоковое аудио
-
Не подходит для сложного микширования в реальном времени
-
Требует внешние зависимости (ffmpeg)
Описание основных функций и методов библиотеки pydub
для Python
Загрузка и экспорт аудио
Функция / Метод | Описание |
---|---|
AudioSegment.from_file(file, format=None) |
Загружает аудиофайл из файла или потока. Формат можно указать явно (например, 'mp3' , 'wav' , 'ogg' ). |
AudioSegment.from_mp3(file) |
Загружает .mp3 файл. |
AudioSegment.from_wav(file) |
Загружает .wav файл. |
AudioSegment.from_ogg(file) |
Загружает .ogg файл. |
AudioSegment.export(out_f, format, codec=None, bitrate=None) |
Экспортирует аудио в файл или поток. Поддерживаются форматы: 'mp3' , 'wav' , 'ogg' , 'flv' и др. |
Основные операции над звуком
Метод | Описание |
---|---|
+ |
Склеивание аудиофайлов. Можно использовать sound1 + sound2 для последовательного соединения. |
* |
Повторение звука. Например, sound * 3 создаст 3 повтора. |
sound.append(segment, crossfade=0) |
Добавляет сегмент к текущему, с возможным кроссфейдом. |
sound[:ms] / sound[start:end] |
Нарезка аудио по миллисекундам. |
sound.set_frame_rate(rate) |
Изменяет частоту дискретизации. |
sound.set_channels(n) |
Устанавливает количество каналов (1 — моно, 2 — стерео). |
sound.set_sample_width(bytes) |
Изменяет разрядность сэмплов (байты). |
sound.reverse() |
Переворачивает аудиотрек (задом наперёд). |
sound.fade_in(ms) / sound.fade_out(ms) |
Плавное нарастание или затухание звука. |
sound.overlay(segment, position=0) |
Накладывает один звук на другой с указанной позиции. |
Работа с громкостью
Метод | Описание |
---|---|
sound + dB |
Увеличивает громкость на указанное количество децибел. |
sound - dB |
Уменьшает громкость. |
sound.apply_gain(dB) |
Применяет усиление (или ослабление) на заданное количество дБ. |
sound.dBFS |
Уровень сигнала в децибелах относительно полной шкалы (используется для нормализации). |
Аудиоэффекты и анализ
Метод | Описание |
---|---|
sound.low_pass_filter(cutoff) |
Пропускает только низкие частоты до cutoff Гц. |
sound.high_pass_filter(cutoff) |
Пропускает только высокие частоты выше cutoff Гц. |
sound.get_array_of_samples() |
Возвращает значения сэмплов как массив. |
sound.duration_seconds |
Продолжительность в секундах (float). |
sound.frame_rate |
Частота дискретизации (в Гц). |
sound.channels |
Количество аудиоканалов. |
sound.sample_width |
Размер сэмпла в байтах. |
Воспроизведение (через внешнюю библиотеку)
Метод / Подход | Описание |
---|---|
play(sound) |
Воспроизводит AudioSegment объект. Требуется установка simpleaudio , pyaudio или ffplay . |
Установка
Также необходим установленный ffmpeg
для работы с большинством форматов:
-
Windows: скачать
ffmpeg.exe
и добавить в PATH -
Linux/macOS:
sudo apt install ffmpeg
илиbrew install ffmpeg
Пример использования
Заключение
Библиотека pydub
предоставляет мощный, но простой в использовании интерфейс для обработки звука. Её можно применять как в научных проектах, так и в коммерческих продуктах. Благодаря поддержке многих форматов и богатому API, pydub
является лучшим выбором для большинства задач, не связанных с real-time обработкой.