Время прочтения: 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’ов, и только после этого начнётся воспроизведение.

Поделитесь этой статей с коллегами, возможно, уже сейчас она будет полезна.