Pythonで動画フレームを自動で分割・切り出し|効率的な動画処理の手法

Pythonを使って、動画をフレームごとに自動で分割・切り出しできる方法ってあるのかな…。動画編集の効率化に役立ちそうだし…。
猫男
猫男
catman
catman
そのアイデアはいい感じだよう。Pythonには動画をフレームに分割し、切り出しを行う方法があるんだ。OpenCVというライブラリを使うと、とても簡単にできるさ。

 

Pythonで動画フレームを分割するための準備

まずは、Pythonで動画フレームを分割するために必要なライブラリをインストールします。主に使用するのはOpenCVです。このライブラリは、画像処理の分野で広く使われています。

必要なライブラリをインストールするには、以下のコマンドを実行してください。

pip install opencv-python

これで、OpenCVを用いた動画処理の準備が整いました。

 

OpenCVで動画をフレームに分割する方法

動画をフレームに分割するためには、動画ファイルを1フレームずつ読み込み、それを画像ファイルとして保存する処理を行います。

Pythonコード

import cv2

def extract_frames(video_path, output_folder):
    cap = cv2.VideoCapture(video_path)
    frame_index = 0

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        frame_name = f"{output_folder}/frame_{frame_index:04d}.png"
        cv2.imwrite(frame_name, frame)
        frame_index += 1

    cap.release()

このコードを実行すると、指定した動画ファイルからフレームが抽出され、指定したフォルダに画像ファイルとして保存されます。

 

コードのポイント

主な部分を見ていきましょう。

  • cv2.VideoCapture(video_path): 動画ファイルを読み込むためのオブジェクトを生成します。
  • cap.isOpened(): ビデオキャプチャデバイスがオープンしているかどうかを確認します。
  • cap.read(): 現在位置のフレームを読み込みます。成功するとret=Trueとなります。
  • cv2.imwrite(frame_name, frame): フレームを画像ファイルとして保存します。
  • cap.release(): ビデオキャプチャを開放します。

 

なるほど、動画からフレームを切り出し保存できるんですね。動画を一瞬で静止画にできるなんて便利です!
猫男
猫男
catman
catman
そうさ。これなら動画の中の特定シーンをピックアップしやすくなる。次は、フレームの分割を効率化する方法を見てみようか。

 

特定のフレームだけを抽出する方法

指定した間隔でフレームを抽出する

すべてのフレームではなく、一定間隔ごとのフレームを抽出したい場合もあります。次に示すコードは、指定した間隔でフレームを切り出す例です。

import cv2

def extract_frames_at_intervals(video_path, output_folder, interval=5):
    cap = cv2.VideoCapture(video_path)
    frame_index = 0
    frame_rate = cap.get(cv2.CAP_PROP_FPS)  # フレームレートを取得
    interval_frames = int(frame_rate * interval)  # 抽出間隔をフレーム数に変換

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        if frame_index % interval_frames == 0:
            frame_name = f"{output_folder}/frame_{frame_index:04d}.png"
            cv2.imwrite(frame_name, frame)
        frame_index += 1

    cap.release()

このコードを使うと、動画から指定した秒数間隔でフレームを抽出して保存できます。

 

コードのポイント

  • cap.get(cv2.CAP_PROP_FPS): 動画のフレームレートを取得します。
  • interval_frames: 指定した秒数をフレーム数に変換します。
  • frame_index % interval_frames == 0: 秒数間隔でフレームを切り出す条件を設定します。

 

秒数ごとにフレームを指定できるんですね!一部シーンだけ取り出したいときに、無駄なく効率的です。
猫男
猫男
catman
catman
その通り。忙しい現代では、時間を有効に使わないとね。Pythonが動画編集の強力なツールになりうるのがわかっただろう。

 

まとめ

PythonとOpenCVを使えば、動画を簡単にフレームに分割し、任意のポイントで切り出すことができます。以下は本記事のまとめです。

  • OpenCVを使って動画を読み込み、フレームを抽出できる
  • すべてのフレームから任意のフレームだけを切り出せる
  • 秒数やフレーム数で間隔を指定し、効率的にフレームを保存できる

動画をフレームに分割する知識があれば、制作において幅広い応用が可能です。これを機にPythonで動画編集の自動化に挑戦してみてください。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。