Как обработать аудио с помощью ffmpeg?
Python и Google творят чудеса! Ffmpeg — это набор свободных библиотек с открытым исходным кодом, который позволяет записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах.
Зачем мне еще одна библиотека, если в Python и родных модулей достаточно?
FFmpeg позволяет делать с аудио ВСЁ. Например, во время реализации AI-проекта по распознаванию аудио, возникла необходимость предобработки. Основные frameworks по распознаванию речи deepspeach2, pocketsphinx работают только с аудио формата .wav 16kHz mono. Руководствуясь ранее изложенным принципом — мы не изобретаем велосипед, а используем готовый метод вызова из Python библиотеки FFmpeg.
Как это работает? Для запуска FFmpeg используем модуль subprocess и os.
Запакуем все необходимые методы внутрь класса. Чтобы класс смог опознать ffmpeg*и ffprobe** пропишем пути до исполняемых файлов .exe.
При создании экземпляра класса указывается путь, где лежат аудиофайлы (переменная mypath) и желаемая длительность аудиофайлов после нарезки (переменная cut_duration).
Любой аудиофайл можно преобразовать из одного формата в другой, передав команду FFmpeg в командную строку. Например, команда, приведенная ниже, преобразует файл input формата .mp3 в файл output формата - wav 16kHz mono.
Обернем это с помощью функции subprocess.Popen (параметр функции file – это имя аудиофайла, который нужно обработать).
А как распознать свойства аудиофайла, например, длительность?
За получение свойств файла отвечает утилита ffprobe, но она выдает сразу все свойства. Чтобы получить именно длительность - через командную строку запускаем следующую команду и на выходе получаем значение показателя в секундах для аудиофайла с именем input.mp3.
Как и ранее обернем эту команду с помощью subprocess.Popen.
Аналогично можно обернуть любую команду FFmpeg, а именно - получить класс, который будет использовать любые необходимые команды библиотек FFmpeg для обработки аудио или видео. Похожим способом мы пользовались для реализации AI-проекта по распознаванию аудио и у нас всё получилось.
* ffmpeg — утилита командной строки для конвертирования видеофайла из одного формата в другой. С её помощью можно также захватывать видео в реальном времени с TV-карты.
** ffprobe — консольная утилита, позволяющая собирать и отображать информацию о медиафайлах (как MediaInfo) и мультимедиа потоках, доступных устройствах, кодеках, форматах, протоколах и др.