Руководство по созданию таймлапсов путем ускорения воспроизведения с помощью модуля MoviePy Python.

В один из выходных в начале октября я чувствовал себя немного измотанным и хотел заняться чем-то другим, что помогло бы мне снова почувствовать себя продуктивным. Покопавшись в своей кладовой, я наткнулся на свой гигантский контейнер с Лего и тут же начал соединять кирпичи. Пару часов спустя, все еще продолжая строить, я вдруг ощутил праздничное настроение и захотел построить что-нибудь на тему Хэллоуина.

Однако в этот момент мой разум стал пустым, поэтому я запрыгнул в Google и сразу же нашел набор Lego «Дом с привидениями». Почувствовав себя маленьким ребенком на Рождество, я быстро купил набор и стал ждать его прибытия. Вскоре после этого прибыл набор, и я начал строить, но во время сборки я записывал себя, намереваясь создать видео с интервальной съемкой.

Проблемы с обрезанием

Как заядлый поклонник программного обеспечения с открытым исходным кодом, я предпочитаю видеоредактор Shotcut, потому что это фантастическое видео, которое позволяет создавать профессионально выглядящие видео. Однако проблема со многими из этих высокопроизводительных редакторов заключается в том, что им требуется компьютер, способный выполнять более сложную обработку, чего у меня нет. Проблема, с которой я столкнулся, заключалась в том, что при попытке увеличить скорость воспроизведения записанных видео Shotcut зависал, а затем в конечном итоге аварийно завершал работу. Это заставило меня проявить творческий подход и придумать альтернативный способ ускорить воспроизведение видео.

Решение

Как всегда, всякий раз, когда у меня возникают проблемы и мне нужны идеи, первым делом я начинаю поиск в Google. Опять же, это не разочаровало, потому что за пару минут мне удалось найти простой модуль Python, который можно использовать для редактирования видео.

MoviePy — это модуль Python для редактирования видео, который можно использовать для базовых операций (таких как вырезание, объединение, вставка заголовков), компоновки видео (также известного как нелинейное редактирование), обработки видео или для создания дополнительных эффектов. Он может читать и записывать наиболее распространенные форматы видео, включая GIF.

- Документация MoviePy

Как и большинство других модулей Python, чтобы начать использовать MoviePy, его необходимо сначала установить.

pip3 install moviepy

После установки я создал новый файл с именем «video_editor.py». В этом файле я импортировал модуль MoviePy, объявил новый класс с именем «video_editor» и объявил функции «__init__» и «speed_up».

from moviepy.editor import *
class video_editor:
     def __init__(self):
          pass
     def speed_up(self):
          pass

В функцию «__init__», которая является конструктором, я добавил параметр, который присваивается переменной класса. Этот параметр определяет место, где будут размещены отредактированные видео.

def __init__(self, output_directory):
     self.output_directory = output_directory

Я определил, что все волшебство должно происходить с помощью функции «speed_up». Я начал с назначения двух параметров: один для имени файла, который также содержит полный путь к местоположению, а другой — для указания MoviePy, насколько быстро следует ускорить воспроизведение.

def speed_up(self, file, speed):

После этого я создал экземпляр класса VideoFileClip и передал видеофайл в качестве аргумента.

video_file = VideoFileClip(file)

Затем я использовал только что созданный экземпляр класса для вызова функции fx. Это то, что ускорит воспроизведение для меня. Мне также пришлось передать аргумент параметров (скорость вернет видео с умноженной скоростью), а также аргумент скорости (насколько быстро будет воспроизводиться видео).

final = video_file.fx(vfx.speedx, speed)

Теперь, когда у меня был объект, содержащий мой отредактированный видеофайл, его нужно было записать в файл. Для этого я сначала импортировал модуль pathlib, чтобы помочь мне получить основу видеофайла, с которым я работал, и соединил с ним выходной каталог. Затем я использовал функцию «write_videofile», чтобы создать настоящий файл.

filename = f"{self.output_directory}{Path(file).stem}.MP4"
final.write_videofile(filename)

Последнее, что нужно было сделать, это вызвать функцию закрытия для экземпляра VideoFileClip.

video_file.close()

Вот как выглядит полный класс:

Видеть это в действии

Как всегда, прежде чем внедрять этот скрипт в производственную среду, его необходимо протестировать. Для этого я создал еще один файл с именем test.py.

touch test.py

Затем я импортировал свой новый класс, создал его новый экземпляр и вызвал функцию «speed_up».

from editor import editor
video_editor = editor("<OUTPUT_PATH>")
video_editor.speed_up(f"<FILENAME>", 10)

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

python3 test.py

Вот конечный продукт:

Заключение

Иметь такой отличный инструмент, как Shotcut, но не иметь возможности использовать его из-за дрянного компьютерного оборудования — отстой, но MoviePy был рядом, чтобы спасти положение. С помощью всего нескольких строк кода я смог быстро получить то, что мне нужно было сделать, но при этом получить качественный результат. Что еще более интересно, так это то, что, поскольку у меня было несколько видео, требующих корректного воспроизведения, я снова мог использовать мощь Python и автоматизировать процесс редактирования с помощью MoviePy.

Это маленькое приключение заставило меня задуматься о том, на что еще способен MoviePy, и я надеюсь, что оно вызвало некоторый интерес и у вас. Дайте мне знать в комментариях, что вы думаете и используете ли вы какие-либо другие модули Python для редактирования видео. Я хотел бы услышать, что вы хотите сказать. До следующего раза, ура!

Читайте все мои статьи бесплатно с моей еженедельной рассылкой, спасибо!

Хотите прочитать все статьи на Medium? Станьте членом Medium сегодня!

Ознакомьтесь с некоторыми из моих последних статей:











Использованная литература:



Больше контента на plainenglish.io