Pythonで動画を静止画に変換する方法|OpenCVを使った自動化手順

Pythonで動画から静止画を作り出す方法ってありますかね…。OpenCVとかが使えるって聞いたことがありますけど、具体的にどうやればいいのか分からなくて…。
猫男
猫男
catman
catman
それならcatmanに任せておきな。PythonとOpenCVを使えば、動画を簡単に静止画に分解できるようにできるさ。

 

PythonとOpenCVで動画から静止画を抽出する方法

PythonとOpenCVを使えば、動画を複数の静止画として抽出できます。

動画から必要な瞬間を捉えた画像を取り出し、ブログやプレゼン資料の素材にするのに役立ちます。

この記事では、PythonとOpenCVで動画から静止画を効率的に抽出する手順を紹介します。

 

OpenCVとは

OpenCVは、画像処理やコンピュータビジョンに利用されるオープンソースのライブラリです。

動画や画像の読み取り、加工、表示など、多彩な機能を利用することができます。

Pythonでも簡単に利用できるため、画像や動画を扱うための強力なツールの一つです。

 

OpenCVをインストールする

最初にOpenCVをインストールします。

pip install opencv-python

このコマンドでOpenCVがインストールされます。

インストールが完了したら、Pythonで利用可能になります。

 

動画から静止画を抽出する

動画全体を静止画に分解するのには、OpenCVを用いることで効率的に行えるようになります。

 

Pythonコード

import cv2
import os

def extract_frames(video_path, output_folder):
    os.makedirs(output_folder, exist_ok=True)
    video_capture = cv2.VideoCapture(video_path)
    frame_number = 0

    while True:
        success, frame = video_capture.read()
        if not success:
            break
        frame_filename = os.path.join(output_folder, f"frame_{frame_number:04d}.png")
        cv2.imwrite(frame_filename, frame)
        frame_number += 1

    video_capture.release()

このコードを実行すると、動画がフレームごとに静止画として保存されます。

 

コードの意味

各部分を簡単に解説します。

  • cv2.VideoCapture()は、動画ファイルを読み込むためのオブジェクトを作成します。
  • video_capture.read()は、動画から1フレームずつ画像を取得します。
  • cv2.imwrite()は、画像をファイルとして保存します。
  • os.makedirs()は、指定されたフォルダが存在しない場合に作成します。

出力フォルダには、frame_0000.pngのようにナンバリングされた画像が保存されます。

 

あ、これなら動画から特定のシーンを切り出して画像として保存できますね!動画から静止画を作れることがこんなに便利だとは…。
猫男
猫男
catman
catman
その通りだよう。必要なシーンを抽出して画像として活用できるのが、動画から静止画を作る一番の利点さ。これでブログや資料ももっと魅力的になるだろう。

 

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

全フレームではなく、一定間隔で抽出したい場合もあります。次に、特定のフレーム間隔で静止画を作る方法を解説します。

 

フレーム間隔を指定するPythonコード

import cv2
import os

def extract_frames_at_interval(video_path, output_folder, interval=10):
    os.makedirs(output_folder, exist_ok=True)
    video_capture = cv2.VideoCapture(video_path)
    frame_number = 0
    saved_frame_number = 0

    while True:
        success, frame = video_capture.read()
        if not success:
            break
        if frame_number % interval == 0:
            frame_filename = os.path.join(output_folder, f"frame_{saved_frame_number:04d}.png")
            cv2.imwrite(frame_filename, frame)
            saved_frame_number += 1
        frame_number += 1

    video_capture.release()

このスクリプトは、指定されたintervalごとにフレームを保存します。

 

選択的にフレームを保存する方法

  • 引数intervalでフレーム抽出の間隔を指定します。
  • frame_number % interval == 0でフレームの保存を判定します。
  • 指定された間隔で画像として保存されるので、全フレーム保存よりも効率的です。

特定のシーンのみを保存したい場合に便利なテクニックです。

 

まとめ

PythonとOpenCVを使えば、動画から静止画を簡単に抽出できます。

今回紹介した内容をまとめると、次のようになります。

  • 動画全体をフレームごとに静止画に分解できる
  • 特定のフレーム間隔で静止画を抽出し、効率的に加工できる
  • OpenCVによる画像処理の応用で、必要なシーンを簡単に取り出せる
  • 資料作成やブログ用素材の自動作成に活用できる

動画から静止画を作れるようになれば、プレゼン資料やブログ記事、SNS投稿に最適な画像を手軽に取得できるようになります。

Pythonで処理を自動化することにより、大量の動画を素早く処理することも可能です。

 

動画から簡単に静止画を作成できるとわかって、いろいろな可能性が広がりそうです!早速試してみます。
猫男
猫男
catman
catman
頑張るんだよう。静止画を上手く活用して、素晴らしい資料やブログを作ってみるといい。PythonとOpenCVで静止画を作れる力を存分に発揮してくれ。

 

EARTHPG 自動化研究所

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

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