В Python 3 реализованы библиотеки для конвертации mp4 файлов в mp3 аудиодорожку. В этой статье будет рассмотрено несколько таких реализаций на примерах. Хоть в статье описаны 2 формата, сами библиотеки поддерживают намного больше.
moviepy
Для редактирования видео существует библиотека moviepy. Одна из возможностей этой библиотеки - получение аудиодорожки с последующим сохранением файла. Библиотека устанавливается отдельно через следующую команду:
pip install moviepy
У библиотеки moviepy есть основной класс для работы с видео - VideoFileClip. При создании объекта этого класса так же создается объект (класс AudioClip) содержащий аудиодорожку. Обратится к этому объекту можно через атрибут 'audio'. Функции, которая выполнит конвертацию видео формата 'mp4' в 'mp3' будет выглядеть следующим образом:
from moviepy.editor import VideoFileClip
def converttomp3(mp4file, mp3file):
video=VideoFileClip(mp4file)
# получаем аудиодорожку
audio=video.audio
# сохраняем аудио файл
audio.write_audiofile(mp3file)
# уничтожаем объекты
# что бы не было ошибок
audio.close()
video.close()
converttomp3('video.mp4', 'audio.mp3')
В метод 'write_audiofile()' можно передать дополнительные параметры. Например fps, bitrate и codec. Так, например, можно установить битрейт (в moviepy битриейт может не совпадать с конечным файлом):
audio.write_audiofile(mp3file, bitrate='320k')
По опыту работы с moviepy могу сказать, что при работе с аудио файлами могут возникать не критические ошибки. Они связаны с путями на Windows. На гитхабе тикет висит несколько лет, но его так никто и не решил. Так же ошибки могут возникать если вы не закрываете файл после работы с ним.
ffmpeg
Самый популярный и надежный способ конвертации видео в любой другой формат - библиотека 'ffmpeg'. Она не относится конкретно к Python, но мы можем совместить их работу через subprocess.
Установка ffmpeg может отличаться в зависимости от ОС. На ubuntu ее можно установить так:
sudo apt install ffmpeg
В Python есть модуль 'subprocess', который входит в базовые модули. Его основная задача - запуск процессов и получение данных с них. В нашем примере это просто запуск консольной программы 'ffmpeg' и получение информации на выводе.
Пример скрипта, который конвертирует файл c битрейтом 320:
import subprocess
command = "ffmpeg -i video.mp4 -b:a 320k audio.mp3"
subprocess.call(command, shell=True)
converter
Еще один популярны способ конвертации файлов - через 'converter'(работает с Python 3.7+). Этот пакет не будет работать на Windows. Сам он представляет собой обертку (wrapper) над ffmpeg, поэтому его установка все равно понадобится. Установить пакет мы можем следующим образом:
pip install PythonVideoConverter
Выполнить конвертацию аналогично предыдущим примерам можно так:
from converter import Converter
conv = Converter()
convert = conv.convert('video.mp4', 'audio.mp3', {
'format': 'mp3',
'audio': {
'codec': 'mp3',
'samplerate': 320,
},
})
for timecode in convert:
print(f'\rConverting ({timecode:.2f}) ...')
В случае Windows вы увидите ошибку так как в ней не реализован сигнал 'SIGVTALRM':
- AttributeError: module 'signal' has no attribute 'SIGVTALRM'
...
Подписывайтесь на наш Telegram канал
Теги: #python