LoginSignup
16
28

MoviePyを使った動画自動編集

Last updated at Posted at 2024-05-29

はじめに

Qiitaで記事を書くのは、何かのシステムとか技術について書くわけですが、文字だけでなく画像で説明することがあります。さらに、動画で説明したいこともあって、どうしようかなーと思ったところがきっかけです。

YouTubeとかの動画配信とかまでは完全に不要で、ちょっとしたのが必要です。狭い領域、短い時間の動画。動画編集ソフトでできるんだろうとは思うんですが、費用がかかるとかインストールがめんどくさいとかPCがそんなにいいやつじゃないとか、、、結局、そんなに大きなものは必要じゃないというところがネックで、採用に踏み切れません。

ということで、PythonのMoviePyにたどり着き、この記事です。

MoviePyの公式HP、ドキュメンテーションなどはこちら。

今回、私が作ったのソースはこちら。全部下に書いてるから、見るまでもないか。でも一応載せておこう。

できたgifアニメファイルがこういうの。内容はいいとして、Windows標準の画面録画機能のゲームバー(Win+G)で録画したブラウザ画面から矩形に切り取って、gif画像にしました。

mv2_out.gif

キャプションを入れたり、複数の動画をつなぎ合わせたり、いろいろできるようですが、調べればすぐできるので、この記事はこんな簡単なところまで。
ここで留めたのは、実際、私がそこまでしか必要としてないからです。こんなことだけのために動画編集ソフトを入れたくない気持ち、伝われ!

初期設定

Python環境にMoviePyをインストールします。

pip install moviepy

コーディング

短いので全体をさらっと。

moviepy_prac.py
from moviepy.editor import *
from pathlib import Path

def main(input_file, output_file_stem):
    # 読み込み
    clip1 = VideoFileClip(input_file)

    # 切り出し
    top = 124
    clip2 = clip1.crop(x1=0, y1=top, x2=320, y2=top+220)

    # 保存
    clip2.write_videofile(f"{output_file_stem}.mp4")
    clip2.write_gif(f"{output_file_stem}.gif", fps=20)


if __name__=='__main__':
    movie_file = Path('./data/mv1.mp4')
    # 出力ファイルの拡張子手前まで
    # ※ 複数の拡張子を変えていくつかのファイルを作りたいので、
    #    拡張子手前までの文字列
    out_file_stem = str(movie_file.parent / f"{movie_file.stem}_out")

    main(str(movie_file), out_file_stem)

ほぼ説明するまでもないですね・・・。

まず、VideoFileClip()で読み込みます。

次に、特定の矩形領域を切り出したかったので、読み込みの戻り値のインスタンスに対してcrop()でそれ以外をカットしています。動画の位置サイズを小さくしています。

最後に、write_videofile()でmp4を作ってみたけど、これは確認用。欲しかったのはwrite_gif()でgifアニメの画像です。fpsでスピードを調整できます。(しないとかなり遅かった)

そのほか

他には、時間をカットする関数subclip()は、使う場面がありそうです。

おわりに

何かの説明用の動画ならば、文字を入れるのも使うといいのかもしれないけど、タイミングや位置など、PythonのCUIでやることじゃねーなと思ったので止めました。
逆に、ブログか何かに載せるgifアニメだったら、Pythonでこれくらいの簡単さでできてちょうどいいなと思いました。

ちなみにプログラミングで画面を少しずつ構築したり機能UPしていくのを説明するときは、機能1を作ったときの動画、その後機能2を作ったときの動画、そして機能3を・・・となります。その場合の動画たちは、矩形領域はいつも同じなので、上で書いたようなスクリプトを作っておけば、何度も何度も使えると思います。少なくとも私は使います。

これこそ、面倒なことはプログラミングで解決するいい例だなと思いました。

私、こういう小粒な道具を作るのが得意です。ご相談、受け付けていますので、ホームページやXのDMなどでもご連絡ください😊
https://small-pieces.vercel.app/

16
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
28