PythonのライブラリであるMoviePyを使えば、
動画編集が簡単に自動化できます。
面倒な手作業をスクリプトに置き換えることで効率的に編集作業を進められるこのライブラリは、動画のカットや結合、テキスト追加からGIFへの変換まで多岐にわたる機能を提供します。
本記事では、MoviePyの基本的な使い方から応用的な操作までをわかりやすく解説します。
- 動画編集を自動化したいプログラマーやエンジニア
- Pythonで動画編集に挑戦したい初心者
- SNS用のショート動画やGIFを素早く作りたい方
- 自動化した動画編集パイプラインを構築したい方
- 動画編集ソフトを使わずにコードで柔軟に編集したい方
moviepy
MoviePyは、Pythonで動画や音声を編集するオープンソースライブラリです。
動画のカットや結合、オーバーレイ、
速度変更など多くの機能を持ち、
mp4からGIFやmp3など他の形式への変換も簡単に行えます。
自動化された動画編集ワークフローを作るのに非常に役立つツールです。
基本的な機能
MoviePyを使って、基本的な動画編集を簡単に行うことができます。
以下に、主な機能とそれぞれのコード例を紹介します。
動画のカット(トリミング)
動画の特定の部分を切り取ることで、必要なシーンだけを抽出できます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4").subclip(10, 30) # 10秒から30秒の部分を切り取る
clip.write_videofile("output_trimmed.mp4")
input_video.mp4の10秒から30秒までの部分を切り取って、
新しい動画ファイルとして保存します。
複数クリップの結合
複数の動画を連結して1つの動画にすることも簡単です。
from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("video1.mp4").subclip(0, 10)
clip2 = VideoFileClip("video2.mp4").subclip(5, 15)
final_clip = concatenate_videoclips([clip1, clip2])
final_clip.write_videofile("output_concatenated.mp4")
video1.mp4の最初の10秒間とvideo2.mp4の5秒から15秒の部分を結合して、
新しい動画を作成しています。
最近のYouTubeは、総集編が多いので、
これで自動編集ができる!
動画のリサイズ
動画の解像度を変更して、特定のサイズにリサイズすることができます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
resized_clip = clip.resize(height=720) # 高さを720ピクセルにリサイズ
resized_clip.write_videofile("output_resized.mp4")
動画の高さを720ピクセルに変更して、新しいファイルとして保存します。
UdemyでPythonを学習
Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonをインストールから環境設定、基本文法が学習
さらに暗号化、インフラ自動化、非同期処理についても学べます。
Pythonを基礎から応用まで学びたい人におすすめ
- みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2024年最新版】
機械学習ライブラリで文字認識や株価分析などを行う。
人口知能やニューラルネットワーク、機械学習を学びたい人におすすめ。
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
統計分析、機械学習の実装、ディープラーニングの実装を学習。
データサイエンティストになりたい人におすすめ。
- 0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜
TkinterのGUIを作成から発展的な操作までアプリ実例を示して学習。
アプリ開発したい人におすすめ。
フレームレートの変更
フレームレートを変更することで、スムーズさを調整したり、特殊な演出を加えることができます。
フレームレートとは、動画やゲームにおいて1秒間に表示される画像(フレーム)の数を示す単位です。
要するに、1秒の動きを表現するために30枚の画像を使うと30fpsになります。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4").set_fps(15) # フレームレートを15fpsに変更
clip.write_videofile("output_changed_fps.mp4")
元の動画のフレームレートを15fpsに設定しています。
動画・画像の加工
MoviePyでは、動画や画像に対してさらに多くの加工を行うことが可能です。
機能として備わっていますが、
トリミングやオーバーレイ、テキストの追加は、
編集ソフトで動画作りした方がやりやすいです。
クロッピング(トリミング)
動画の一部を切り取ることで、不要な部分を削除し、必要な部分のみを残すことができます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
cropped_clip = clip.crop(x1=100, y1=50, x2=400, y2=300) # 指定したエリアをクロップ
cropped_clip.write_videofile("output_cropped.mp4")
動画の特定のエリアをクロップして、新しい動画として保存します。
画像のオーバーレイ
動画の上に画像をオーバーレイすることが可能です。
from moviepy.editor import VideoFileClip, ImageClip, CompositeVideoClip
video_clip = VideoFileClip("input_video.mp4")
image_clip = ImageClip("overlay_image.png").set_duration(video_clip.duration)
image_clip = image_clip.set_position(("right", "top")) # 画像の位置を右上に設定
composite_clip = CompositeVideoClip([video_clip, image_clip])
composite_clip.write_videofile("output_with_overlay.mp4")
input_video.mp4の上にoverlay_image.pngを右上に表示させています。
テキストの追加
動画上にテキストを追加することができます。
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
video_clip = VideoFileClip("input_video.mp4")
text_clip = TextClip("Hello, World!", fontsize=70, color='white').set_duration(5)
text_clip = text_clip.set_position('center').fadein(1).fadeout(1) # フェードイン・フェードアウト効果
composite_clip = CompositeVideoClip([video_clip, text_clip])
composite_clip.write_videofile("output_with_text.mp4")
動画の中央に5秒間表示されるテキストを追加し、
フェードインとフェードアウト効果を加えています。
動画の回転
動画を任意の角度に回転させることができます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
rotated_clip = clip.rotate(90) # 動画を90度回転
rotated_clip.write_videofile("output_rotated.mp4")
動画を90度回転させています。
動画・音声の効果
動画に視覚的な効果を加えることで、より魅力的なコンテンツを作成することができます。
また、音声を調整して臨場感がある動画作りができます。
フェードイン/フェードアウト
フェード効果を使って、動画の始まりや終わりを滑らかに演出します。
from moviepy.editor import VideoFileClip
from moviepy.video.fx import fadein, fadeout
clip = VideoFileClip("input_video.mp4")
clip_with_fadein = fadein.fadein(clip, 2) # 最初の2秒をフェードイン
clip_with_fadeout = fadeout.fadeout(clip_with_fadein, 2) # 最後の2秒をフェードアウト
clip_with_fadeout.write_videofile("output_fade.mp4")
最初の2秒間のフェードインと最後の2秒間のフェードアウトを加えています。
速度変更
動画の再生速度を変更することができます(スローモーションや早送り)。
from moviepy.editor import VideoFileClip, vfx
clip = VideoFileClip("input_video.mp4")
sped_up_clip = clip.fx(vfx.speedx, 2) # 2倍速にする
sped_up_clip.write_videofile("output_sped_up.mp4")
動画を2倍速にして新しいファイルとして保存しています。
ミラーリング(反転)
動画を左右または上下に反転させることが可能です。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
mirrored_clip = clip.fx(vfx.mirror_x) # 左右反転
mirrored_clip.write_videofile("output_mirrored.mp4")
動画を左右反転させています。
カラー調整
動画の色調(輝度、コントラスト、彩度など)を調整できます。
from moviepy.editor import VideoFileClip
from moviepy.video.fx import colorx
clip = VideoFileClip("input_video.mp4")
brightened_clip = colorx.colorx(clip, 1.5) # 輝度を1.5倍に
brightened_clip.write_videofile("output_brightened.mp4")
動画の輝度を1.5倍に調整しています。
音声の追加/削除
動画の音声を削除したり、新しい音声を追加することができます。
from moviepy.editor import VideoFileClip, AudioFileClip
clip = VideoFileClip("input_video.mp4")
audio = AudioFileClip("new_audio.mp3").set_duration(clip.duration)
clip_with_new_audio = clip.set_audio(audio)
clip_with_new_audio.write_videofile("output_with_new_audio.mp4")
input_video.mp4に新しい音声ファイルnew_audio.mp3を追加しています。
音量調整
動画や音声クリップの音量を変更することができます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
quieter_clip = clip.volumex(0.5) # 音量を半分に
quieter_clip.write_videofile("output_quieter.mp4")
動画の音量を半分にしています。
フェードイン/フェードアウト(音声)
音声クリップにフェード効果を加えることが可能です。
from moviepy.editor import VideoFileClip, AudioFileClip
from moviepy.audio.fx import audio_fadein, audio_fadeout
clip = VideoFileClip("input_video.mp4")
audio = clip.audio
faded_audio = audio_fadein.audio_fadein(audio, 2).fx(audio_fadeout.audio_fadeout, 2)
clip_with_faded_audio = clip.set_audio(faded_audio)
clip_with_faded_audio.write_videofile("output_faded_audio.mp4")
音声に最初と最後の2秒間のフェードイン・フェードアウト効果を追加しています。
応用例
MoviePyを使って、さらに複雑な動画編集を行うことも可能です。
以下にいくつかの応用例を紹介します。
動画に画像をオーバーレイ
動画の上にロゴや他の画像を追加することで、カスタマイズされた動画を作成することができます。
from moviepy.editor import VideoFileClip, ImageClip, CompositeVideoClip
video_clip = VideoFileClip("input_video.mp4")
image_clip = ImageClip("overlay_image.png").set_duration(video_clip.duration)
image_clip = image_clip.set_position(("right", "top")) # 画像の位置を右上に設定
composite_clip = CompositeVideoClip([video_clip, image_clip])
composite_clip.write_videofile("output_with_overlay.mp4")
この例では、input_video.mp4の上にoverlay_image.pngを右上に表示させています。
テキストのアニメーション
動画上にアニメーション化されたテキストを追加して、より魅力的な演出を行います。
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
video_clip = VideoFileClip("input_video.mp4")
text_clip = TextClip("Hello, World!", fontsize=70, color='white').set_duration(5)
text_clip = text_clip.set_position('center').fadein(1).fadeout(1) # フェードイン・フェードアウト効果
composite_clip = CompositeVideoClip([video_clip, text_clip])
composite_clip.write_videofile("output_with_text.mp4")
このコードでは、動画の中央に5秒間表示されるテキストを追加し、
フェードインとフェードアウト効果を加えています。
ピクチャー・イン・ピクチャー(PIP)効果
メインの動画の中に別の小さな動画を配置することで、
ピクチャー・イン・ピクチャー効果を実現します。
from moviepy.editor import VideoFileClip, CompositeVideoClip
main_clip = VideoFileClip("main_video.mp4")
small_clip = VideoFileClip("small_video.mp4").resize(height=150).set_position((10, 10)).set_duration(main_clip.duration)
pip_clip = CompositeVideoClip([main_clip, small_clip])
pip_clip.write_videofile("output_pip.mp4")
main_video.mp4の左上に小さなsmall_video.mp4を配置しています。
形式変換
MoviePyは動画のフォーマット変換もサポートしています。
MoviePyは多機能ですが、直感で編集できないので、用途が限られます。
しかし、動画を結合して、それをmp3やGIFに変換することで、
色々な場所で使うことができます。
例えば、私の場合は動画をGIFに変換してブログ投稿したり、
逆にGIFをmp4に変換して動画編集したりしています。
このように、フォーマットの変換はかなり使いやすいです。
mp3への変換
動画から音声を抽出してmp3ファイルとして保存できます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4")
clip.audio.write_audiofile("output_audio.mp3")
input_video.mp4の音声部分を抽出して、output_audio.mp3として保存します。
GIFへの変換
特定のシーンをGIFとしてエクスポートすることで、短いアニメーションを簡単に作成できます。
from moviepy.editor import VideoFileClip
clip = VideoFileClip("input_video.mp4").subclip(0, 5) # 最初の5秒をGIFに変換
clip.write_gif("output.gif")
動画の最初の5秒間をGIFとしてエクスポートしています。
GIFをmp4に変換
GIFをインポートして、output.mp4をエクスポートしています。
from moviepy.editor import VideoFileClip
# GIFをmp4に変換
clip = VideoFileClip("input.gif") # 入力GIFファイルを指定
clip.write_videofile("output.mp4", codec="libx264") # mp4形式で出力
まとめ
MoviePyを使えば、Pythonで動画や音声を自由自在に編集することができます。
動画のカット、結合、リサイズ、エフェクト追加など、
MoviePyの基本機能を使いこなすことで、柔軟にコンテンツを作成することが可能です。
また、GIFやmp3などの形式に変換することも容易で、SNS用の素材作りにも最適です。
応用的な操作として、画像やテキストのオーバーレイ、ピクチャー・イン・ピクチャー効果などを利用することで、より高度で魅力的な動画編集が可能になります。
ぜひ本記事を参考に、MoviePyで様々な動画編集に挑戦してみてください!