Как разделить аудио и видео-дорожки для уменьшения их объема с помощью MoviePy?

Однажды нам дали видеоматериал и была поставлена задача разделить аудио и видео дорожки для уменьшения объема хранимых файлов. Для конвейерной обработки файлов мы использовали библиотеки 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’ов, и только после этого начнётся воспроизведение.

0
Комментарии
-3 комментариев
Раскрывать всегда