Pydub – обработка аудио

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

Обработка аудио — важная часть многих приложений: от генерации звуковых эффектов и редактирования подкастов до голосовых ассистентов и мультимедийных систем. В языке 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.

Установка

bash
pip install pydub

Также необходим установленный ffmpeg для работы с большинством форматов:

  • Windows: скачать ffmpeg.exe и добавить в PATH

  • Linux/macOS: sudo apt install ffmpeg или brew install ffmpeg


Пример использования

python
from pydub import AudioSegment from pydub.playback import play sound = AudioSegment.from_mp3("example.mp3") cut = sound[:5000] # первые 5 секунд louder = cut + 6 # увеличение громкости на 6 дБ play(louder)

Заключение

Библиотека pydub предоставляет мощный, но простой в использовании интерфейс для обработки звука. Её можно применять как в научных проектах, так и в коммерческих продуктах. Благодаря поддержке многих форматов и богатому API, pydub является лучшим выбором для большинства задач, не связанных с real-time обработкой.