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のようにナンバリングされた画像が保存されます。
特定のフレームだけ抽出する
全フレームではなく、一定間隔で抽出したい場合もあります。次に、特定のフレーム間隔で静止画を作る方法を解説します。
フレーム間隔を指定する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で処理を自動化することにより、大量の動画を素早く処理することも可能です。