[Python] mp4ファイルの動画を作成する方法

PythonでMP4ファイルの動画を作成するには、一般的に OpenCVMoviePy などのライブラリを使用します。

OpenCVでは、cv2.VideoWriterを使ってフレームを連続的に書き込み、MP4形式の動画を生成できます。

MoviePyは、より高レベルな操作が可能で、VideoClipImageSequenceClipを使って画像やフレームから動画を作成できます。

どちらのライブラリも、pipでインストール可能です。

この記事でわかること
  • OpenCVを使った動画作成方法
  • MoviePyによる動画編集の手法
  • 画像から動画を作成する手順
  • 動画の圧縮と最適化の技術
  • 動画編集の応用例と実践方法

目次から探す

OpenCVを使ったMP4動画の作成方法

OpenCVのインストール方法

OpenCVはPythonで画像処理やコンピュータビジョンを行うためのライブラリです。

以下のコマンドを使用して、OpenCVをインストールできます。

pip install opencv-python

cv2.VideoWriterの基本的な使い方

cv2.VideoWriterは、動画ファイルを作成するためのクラスです。

動画の書き込みを行うためには、まずこのクラスのインスタンスを作成します。

import cv2
# 動画ファイルの名前、コーデック、フレームレート、解像度を指定
video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (640, 480))

フレームの生成と書き込み

動画に書き込むフレームを生成し、writeメソッドを使用してフレームを動画に追加します。

以下は、単純な黒い画像をフレームとして追加する例です。

import numpy as np
# 100フレームの動画を作成
for i in range(100):
    # 黒い画像を生成
    frame = np.zeros((480, 640, 3), dtype=np.uint8)
    # フレームにテキストを追加
    cv2.putText(frame, f'Frame {i}', (50, 240), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
    # フレームを動画に書き込む
    video_writer.write(frame)

コーデックの選択と設定

動画のコーデックは、動画の圧縮方式を決定します。

OpenCVでは、VideoWriter_fourcc関数を使用してコーデックを指定します。

一般的なコーデックには以下があります。

コーデック名ファイル拡張子FourCCコード
Motion JPEG.aviMJPG
MPEG-4.2.avi, .mp4DIVX
MPEG-4.3.avi, .mp4XVID
H.264.mp4X264
H.265/HEVC.mp4, .mkvHEVC
環境により対応状況は異なる

フレームレートと解像度の指定

フレームレートは、1秒間に表示されるフレームの数を示します。

解像度は、動画の幅と高さをピクセル単位で指定します。

以下のように設定します。

# フレームレートを30fps、解像度を640x480に設定
video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (640, 480))

動画の保存と終了処理

全てのフレームを書き込んだ後は、releaseメソッドを呼び出して動画ファイルを保存し、リソースを解放します。

# 動画ファイルを保存
video_writer.release()

実際のコード例

以下は、OpenCVを使用してMP4動画を作成する完全なコード例です。

import cv2
import numpy as np
# 動画ファイルの設定
video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (640, 480))
# 100フレームの動画を作成
for i in range(100):
    frame = np.zeros((480, 640, 3), dtype=np.uint8)
    cv2.putText(frame, f'Frame {i}', (50, 240), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
    video_writer.write(frame)
# 動画ファイルを保存
video_writer.release()

出力結果は、output.mp4という名前の動画ファイルが生成され、各フレームに Frame 0 から Frame 99 までのテキストが表示されます。

MoviePyを使ったMP4動画の作成方法

MoviePyのインストール方法

MoviePyは、Pythonで動画編集を行うための強力なライブラリです。

以下のコマンドを使用して、MoviePyをインストールできます。

pip install moviepy

VideoClipとImageSequenceClipの使い方

MoviePyでは、VideoClipクラスを使用して動画を作成します。

また、複数の画像から動画を作成する場合は、ImageSequenceClipを使用します。

from moviepy.editor import VideoClip, ImageSequenceClip
# 動画クリップの作成
clip = VideoClip(lambda t: np.sin(2 * np.pi * t), duration=5)  # 5秒間のサイン波動画

画像から動画を作成する方法

複数の画像を使って動画を作成するには、ImageSequenceClipを使用します。

以下のように、画像のリストを指定して動画を生成します。

from moviepy.editor import ImageSequenceClip
# 画像のリストを指定
image_files = ['image1.png', 'image2.png', 'image3.png']
clip = ImageSequenceClip(image_files, fps=24)  # 24fpsの動画を作成

テキストやエフェクトの追加

MoviePyでは、動画にテキストやエフェクトを簡単に追加できます。

以下は、テキストを動画に追加する例です。

from moviepy.editor import TextClip, CompositeVideoClip
# テキストクリップの作成
text_clip = TextClip("Hello, MoviePy!", fontsize=70, color='white')
text_clip = text_clip.set_position('center').set_duration(5)
# 動画クリップとテキストクリップを合成
final_clip = CompositeVideoClip([clip, text_clip])

音声付き動画の作成

音声を動画に追加するには、set_audioメソッドを使用します。

以下は、音声ファイルを動画に追加する例です。

from moviepy.editor import AudioFileClip
# 音声ファイルの読み込み
audio_clip = AudioFileClip('audio.mp3')
# 動画クリップに音声を追加
final_clip = final_clip.set_audio(audio_clip)

動画の保存とエクスポート

動画を保存するには、write_videofileメソッドを使用します。

以下のように、ファイル名を指定して動画をエクスポートします。

# 動画をMP4形式で保存
final_clip.write_videofile('output.mp4', codec='libx264')

実際のコード例

以下は、MoviePyを使用してMP4動画を作成する完全なコード例です。

from moviepy.editor import VideoClip, TextClip, CompositeVideoClip, AudioFileClip, ImageSequenceClip
import numpy as np
# 動画クリップの作成
clip = VideoClip(lambda t: np.sin(2 * np.pi * t), duration=5)
# テキストクリップの作成
text_clip = TextClip("Hello, MoviePy!", fontsize=70, color='white')
text_clip = text_clip.set_position('center').set_duration(5)
# 動画クリップとテキストクリップを合成
final_clip = CompositeVideoClip([clip, text_clip])
# 音声ファイルの読み込み
audio_clip = AudioFileClip('audio.mp3')
# 動画クリップに音声を追加
final_clip = final_clip.set_audio(audio_clip)
# 動画をMP4形式で保存
final_clip.write_videofile('output.mp4', codec='libx264')

このコードを実行すると、サイン波の動画にテキスト Hello, MoviePy! と音声が追加されたoutput.mp4という動画ファイルが生成されます。

画像から動画を作成する方法

画像の準備と読み込み

画像から動画を作成するためには、まず使用する画像を準備します。

画像は同じ解像度であることが望ましく、連続したフレームとして扱われます。

以下のように、Pythonで画像を読み込むことができます。

import cv2
import os
# 画像ファイルのパスを指定
image_folder = 'images'
image_files = [os.path.join(image_folder, img) for img in sorted(os.listdir(image_folder)) if img.endswith('.png')]

OpenCVを使った画像からの動画作成

OpenCVを使用して、画像から動画を作成する方法を紹介します。

以下のコードでは、指定した画像をフレームとして動画に書き込みます。

import cv2
import os
# 動画ファイルの設定
video_writer = cv2.VideoWriter('output_opencv.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (640, 480))
# 画像の読み込みと動画への書き込み
for image_file in image_files:
    frame = cv2.imread(image_file)
    frame = cv2.resize(frame, (640, 480))  # 解像度を640x480に変更
    video_writer.write(frame)
# 動画ファイルを保存
video_writer.release()

MoviePyを使った画像からの動画作成

MoviePyを使用して画像から動画を作成する方法もあります。

以下のコードでは、ImageSequenceClipを使用して画像を動画に変換します。

from moviepy.editor import ImageSequenceClip
# 画像のリストを指定
clip = ImageSequenceClip(image_files, fps=24)  # 24fpsの動画を作成
# 動画をMP4形式で保存
clip.write_videofile('output_moviepy.mp4', codec='libx264')

フレームレートの調整

フレームレートは、動画の滑らかさに影響を与えます。

MoviePyでは、fpsパラメータを指定することでフレームレートを調整できます。

OpenCVでも、VideoWriterのインスタンス作成時にフレームレートを指定します。

# OpenCVでのフレームレート設定
video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (640, 480))
# MoviePyでのフレームレート設定
clip = ImageSequenceClip(image_files, fps=24)

解像度の変更方法

画像の解像度を変更するには、OpenCVのresizeメソッドを使用します。

MoviePyでは、resizeメソッドを使用して動画全体の解像度を変更できます。

# OpenCVでの解像度変更
frame = cv2.resize(frame, (640, 480))  # 640x480に変更
# MoviePyでの解像度変更
clip_resized = clip.resize(newsize=(640, 480))  # 640x480に変更

このように、画像から動画を作成する際には、使用するライブラリに応じて適切な方法を選択し、フレームレートや解像度を調整することが重要です。

動画編集の応用例

動画にテキストを追加する方法

動画にテキストを追加することで、視聴者に情報を伝えたり、タイトルやキャプションを表示したりできます。

MoviePyを使用してテキストを追加する方法は以下の通りです。

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# 動画クリップの読み込み
video_clip = VideoFileClip('input.mp4')
# テキストクリップの作成
text_clip = TextClip("サンプルテキスト", fontsize=70, color='white')
text_clip = text_clip.set_position('center').set_duration(video_clip.duration)
# 動画クリップとテキストクリップを合成
final_clip = CompositeVideoClip([video_clip, text_clip])
# 動画を保存
final_clip.write_videofile('output_with_text.mp4', codec='libx264')

動画に音声を追加する方法

音声を動画に追加することで、ナレーションやBGMを加えることができます。

以下は、MoviePyを使用して音声を追加する方法です。

from moviepy.editor import VideoFileClip, AudioFileClip
# 動画クリップの読み込み
video_clip = VideoFileClip('input.mp4')
# 音声ファイルの読み込み
audio_clip = AudioFileClip('audio.mp3')
# 動画クリップに音声を追加
final_clip = video_clip.set_audio(audio_clip)
# 動画を保存
final_clip.write_videofile('output_with_audio.mp4', codec='libx264')

動画のトリミングと結合

動画の特定の部分をトリミングしたり、複数の動画を結合したりすることも可能です。

以下は、MoviePyを使用したトリミングと結合の例です。

from moviepy.editor import VideoFileClip, concatenate_videoclips
# 動画クリップの読み込み
clip1 = VideoFileClip('input1.mp4').subclip(0, 5)  # 最初の5秒をトリミング
clip2 = VideoFileClip('input2.mp4').subclip(10, 15)  # 10秒から15秒をトリミング
# 動画クリップの結合
final_clip = concatenate_videoclips([clip1, clip2])
# 動画を保存
final_clip.write_videofile('output_concatenated.mp4', codec='libx264')

動画のリサイズと回転

動画のサイズを変更したり、回転させたりすることもできます。

以下は、MoviePyを使用したリサイズと回転の例です。

from moviepy.editor import VideoFileClip
# 動画クリップの読み込み
video_clip = VideoFileClip('input.mp4')
# 動画のリサイズ
resized_clip = video_clip.resize(newsize=(640, 480))  # 640x480にリサイズ
# 動画の回転
rotated_clip = resized_clip.rotate(90)  # 90度回転
# 動画を保存
rotated_clip.write_videofile('output_resized_rotated.mp4', codec='libx264')

動画のフィルタリングとエフェクトの適用

動画にフィルタやエフェクトを適用することで、視覚的な魅力を高めることができます。

以下は、MoviePyを使用してエフェクトを適用する例です。

from moviepy.editor import VideoFileClip
# 動画クリップの読み込み
video_clip = VideoFileClip('input.mp4')
# グレースケールフィルタの適用
gray_clip = video_clip.fx(vfx.blackwhite)
# 動画を保存
gray_clip.write_videofile('output_gray.mp4', codec='libx264')

これらの応用例を通じて、動画編集の幅が広がり、より魅力的なコンテンツを作成することができます。

動画の最適化と圧縮

コーデックの選択によるファイルサイズの最適化

動画のファイルサイズは、使用するコーデックによって大きく変わります。

一般的に、以下のコーデックがよく使用されます。

スクロールできます
コーデック名説明特徴
‘mp4v’MPEG-4高圧縮率で広く使用される
‘H264’H.264高画質で圧縮効率が良い
‘XVID’Xvidオープンソースで人気
‘MJPG’Motion JPEG高画質だがファイルサイズが大きい

適切なコーデックを選択することで、画質を保ちながらファイルサイズを小さくすることが可能です。

フレームレートと解像度の調整

フレームレート(fps)や解像度を調整することで、動画のファイルサイズを最適化できます。

フレームレートを下げると、1秒あたりのフレーム数が減少し、ファイルサイズが小さくなります。

また、解像度を下げることで、画面のピクセル数が減少し、ファイルサイズが小さくなります。

# OpenCVでのフレームレートと解像度の設定
video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 15, (320, 240))  # 15fps、320x240

OpenCVでの圧縮設定

OpenCVを使用して動画を圧縮する際は、コーデックやフレームレート、解像度を適切に設定することが重要です。

以下は、OpenCVでの圧縮設定の例です。

import cv2
# 動画ファイルの設定
video_writer = cv2.VideoWriter('output_compressed.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 15, (320, 240))
# フレームの書き込み処理(省略)
# 動画ファイルを保存
video_writer.release()

MoviePyでの圧縮設定

MoviePyを使用して動画を圧縮する場合も、コーデックやフレームレート、解像度を設定することができます。

以下は、MoviePyでの圧縮設定の例です。

from moviepy.editor import VideoFileClip
# 動画クリップの読み込み
video_clip = VideoFileClip('input.mp4')
# 解像度を変更し、フレームレートを設定
compressed_clip = video_clip.resize(newsize=(320, 240)).set_duration(video_clip.duration).set_fps(15)
# 動画を保存
compressed_clip.write_videofile('output_compressed_moviepy.mp4', codec='libx264')

これらの方法を用いることで、動画の最適化と圧縮を行い、ストレージの節約や配信の効率化を図ることができます。

よくある質問

OpenCVとMoviePyの違いは何ですか?

OpenCVとMoviePyはどちらも動画処理に使用されるライブラリですが、それぞれの目的や機能に違いがあります。

  • OpenCV:
  • 主に画像処理やコンピュータビジョンに特化したライブラリです。
  • 動画のフレームを個別に処理することが得意で、リアルタイム処理や画像解析に向いています。
  • 動画の作成や編集も可能ですが、主にフレーム単位での操作が中心です。
  • MoviePy:
  • 動画編集に特化したライブラリで、簡単に動画を作成・編集できます。
  • テキストや音声の追加、エフェクトの適用など、動画編集に必要な機能が豊富です。
  • 直感的なAPIを提供しており、短時間で動画を編集することが可能です。

動画のフレームレートを変更するにはどうすればいいですか?

動画のフレームレートを変更する方法は、使用するライブラリによって異なります。

  • OpenCV:
  • VideoWriterのインスタンスを作成する際に、fpsパラメータを指定します。
  video_writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 15, (640, 480))  # 15fpsに設定
  • MoviePy:
  • set_fpsメソッドを使用して、動画クリップのフレームレートを変更します。
  final_clip = video_clip.set_fps(15)  # 15fpsに設定

動画に音声を追加する方法は?

動画に音声を追加する方法は、以下のようにライブラリによって異なります。

  • OpenCV:
  • OpenCV自体には音声を追加する機能はありませんが、動画を作成した後に別のライブラリ(例:MoviePy)を使用して音声を追加することができます。
  • MoviePy:
  • set_audioメソッドを使用して、動画クリップに音声を追加します。
  from moviepy.editor import VideoFileClip, AudioFileClip
  video_clip = VideoFileClip('input.mp4')
  audio_clip = AudioFileClip('audio.mp3')
  final_clip = video_clip.set_audio(audio_clip)
  final_clip.write_videofile('output_with_audio.mp4', codec='libx264')

これにより、動画に音声を簡単に追加することができます。

まとめ

この記事では、Pythonを使用して動画を作成・編集するためのさまざまな方法について解説しました。

OpenCVやMoviePyを利用することで、画像から動画を作成したり、動画にテキストや音声を追加したりすることが可能です。

また、動画の最適化や圧縮に関するテクニックも紹介しました。

これらの知識を活用して、魅力的な動画コンテンツを制作し、さまざまなプロジェクトに応用してみてください。

  • URLをコピーしました!
目次から探す