LoginSignup
30
22

More than 3 years have passed since last update.

MoviePyを使ってPythonで動画編集をする

Last updated at Posted at 2020-12-24

前置き

この記事はMoviePyの公式ドキュメントを簡単にまとめたものです。本格的にMoviePyを使いこなしたい人はおやつでもつまみながら公式ドキュメント全体をじっくり読むことをおすすめします。英語ですが、Google翻訳を使いつつ、難解な部分はDeepLを使用しながら読み進めば大丈夫なはずです。Githubも読んでおくと良いかもしれません。この記事はとりあえず全体を理解したい、とにかく今すぐ使いたいという人向けです。誤り、情報の更新などがありましたら遠慮なくお教え下さい。

MoviePyとは?

Pythonで動画編集ができるライブラリです。Pythonでは他にも動画編集を行う手段があります。画像編集ライブラリopenCVをつかった手法、ffmpegをコマンドラインで操作する手法などです。場合によってはこれらを検討するのもアリです。
YouTubeにMoviePyで具体的にどのようなことができるのかのサンプルがあります。

インストール

windwosの人は色々躓くと思いますのでWSLの利用を推奨します。(WSL最高)

pip install moviepy

WSLが使えない場合は下の参考に書かれた手順が必要かもしれません。
参考

基本

具体的な編集例を列挙する前に、基本をおさえとおくと混乱が少ないのでまとめます。

クリップ

MoviePyではクリップという概念で編集をします。クリップには動画クリップ、音声クリップ、画像クリップ、テキストクリップなどがあります。それらを編集したり、つなぎ合わせることで編集をおこないます。

座標

座標は左上を0として、右にX、下にYとなります。
座標概念の図
引用: https://zulko.github.io/moviepy/getting_started/compositing.html

時間指定

時間指定の基本単位は秒で、様々な指定方法があります。

t=15              # 15秒
t=15.12           # 小数点もいける
t=(3, 15.12)      # この場合3分15.12秒
t=(1, 3, 15.12)   # この場合1時間3分15.12秒
t=('1:03:15.12')  # このような指定もできる

できること

サンプル素材

サンプル素材としてNHKクリエイティブ・ライブラリーから猫の動画をダウンロードしました。数十秒程度の動画素材ならなんでもかまいません。ただし編集の効果がわかりやすいよう、カット等がされていない素材がいいと思います。これをcat.mp4として保存します。

実行環境

Ubuntu20.24 (WSL)
Python 3.8.5

複数の動画をつなげる

cat.mp4の0~2秒、4秒~5秒、10秒~11秒をつなげて一つにファイルにします。

from moviepy.editor import *
clip1 = VideoFileClip("cat.mp4").subclip(0, 2)              # 動画の切り出し
clip2 = VideoFileClip("cat.mp4").subclip(4, 5)
clip3 = VideoFileClip("cat.mp4").subclip(10, 11)
final_clip = concatenate_videoclips([clip1, clip2, clip3])  # 動画の結合
final_clip.write_videofile("final_cat.mp4")                 # 動画の書き出し

動画に効果を加える

動画の反転

<クリップ>.fx(<効果>)でクリップに効果を与えることができます。
この場合左右上下反転された動画ができます。

clip4 = VideoFileClip("cat.mp4")
clip5 = clip4.fx(vfx.mirror_x)  # x軸で動画を反転
clip6 = clip4.fx(vfx.mirror_y)  # y軸で動画を反転

動画のりサイズ

<クリップ>.fx(<効果>, オプション)でクリップの効果にオプションを与えることができます。
この場合アスペクト比はそのままで、横が200pxの動画が書き出されます。

clip7 = VideoFileClip("cat.mp4")
clip8 = clip7.fx(vfx.resize, width=200)

動画の切り取り

これらの効果はつなげて書くことができます。
この場合横幅500pxで左上から200px * 200pxの範囲が切り出されます。

clip9 = VideoFileClip("cat.mp4")
clip10 = (clip9.fx(vfx.resize, width=500)
               .fx(vfx.crop, x1=0, y1=0, x2=200, y2=200))

ほかにも本当にたくさんの色々なことができます。詳しくは公式ドキュメントをご覧ください。

MoviePyを作って作られたもの

ここにMoviePyを用いて作られた作品例があります。

今後他にも内容を追加していく予定です…

30
22
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
30
22