Время прочтения: 3 мин.
Однажды мне дали видеоматериал и была поставлена задача разделить аудио и видео дорожки для уменьшения объема хранимых файлов.
Для конвейерной обработки файлов я использовал библиотеки MoviePy и pydub, которая помимо инструментов для видеомонтажа, содержит все необходимые функции и для обработки аудио.
Первый этап — отделение и запись только аудио и только видео MoviePy.
1) Установка библиотеки производится просто: pip install movipy
2) Импорт в проект: import MoviePy.editor
3) Чтение видеоклипа производится при помощи метода VideoFileClip(<путь до файла\имя.расширение>)
В качестве атрибутов данный метод может принимать:
— битрейт
— частоту обновления
— количество байт для кодирования
— видео кодек
— размер буфера
— и т.д.
Во избежание переполнения оперативной памяти рекомендую использовать вспомогательный метод subclip (<начало отрезка в секундах>, <конец отрезка>)»
4) Для отделения аудио дорожки используем метод audio:
Аудио дорожку можно отделить и удержать в оперативной памяти audio=video.audio
Объект хранящийся в оперативной памяти метода, можно записать на диск сразу после отделения video.audio.write_audiofile(path)
5) Для записи аудио дорожки определен метод write_audiofile
6) Для записи видео дорожки определен метод write_videofile
import MoviePy.editor as mp
MyVideo = mp.VideoFileClip(“path”).subclip(0,100)
MyAudio = MyVideo.audio
MyVideo.audio.write_audiofile(“path”)
MyAudio.write_audiofile(“path”)
MyVideo.write_videofile(“path”)
Второй этап — разделение аудиодорожек.
Использование в работе вышеизложенного, на первый взгляд, достаточно для обработки видео дорожки. Однако иногда недостаточно для обработки аудио, т.к. аудио дорожек может быть несколько и необходимо выделение монодорожки.
Для языка Python существует библиотека «pydub» для обработки аудио, которая имеет больше функциональных возможностей, чем MoviePy, но передать напрямую объект VideoFileClip в pydub нельзя, поэтому необходимо производить чтение аудиодорожек из файлов.
Для чтения аудио дорожки в pydub используется определенный класс и метод:
AudioSegment from_<название_расширения>.
Изменения параметров аудио осуществляются через маску:
set_<имя_параметра>
from pydub import AudioSegment
sound = AudioSegment.from_wav(r"C:\Users\IgorN\Desktop\SANDBOX\ffmpg\theaudio2.wav")
sound = sound.set_channels(1)
sound.export("/output.wav", format="wav")
Результатом манипуляций, представленных выше стал «WAV» файл, который после конвертации в формат «MP3» в среднем имеет объем в четыре раза меньше исходного видео файла. Это работает и в обратную сторону объем видео файлов без аудио дорожки сокращается в среднем на четверть, но эти соотношения очень вариативны.
Посмотреть видеозапись в блокноте Jupyter можно двумя путями.
При импорте модуля Video из библиотеки IPython.display и чтении видео, воспроизведение файла можно начать сразу после считывания первого chank’а с подгрузкой последующих во время просмотра.
Так же можно воспроизвести видео, обращаясь к методу ipython_display объекта VideoFileClip, при этом произойдет сначала запись во временное хранилище всех chank’ов, и только после этого начнётся воспроизведение.
Поделитесь этой статей с коллегами, возможно, уже сейчас она будет полезна.