PythonとOpenCVで動画を保存する方法|動画保存がうまくいかない時の対処法

PythonとOpenCVを使って動画を保存したいんだけど…動画保存がうまくいかないんだ。どうすればいいのかな…。
猫男
猫男
catman
catman
心配はいらないよう、catmanが手を貸そう。OpenCVを使えば、動画保存は簡単にできるさ。何が問題か一緒に見てみよう。

 

PythonとOpenCVで動画を保存する基本

PythonとOpenCVを使うと、カメラからキャプチャした映像や処理後の画像を動画として保存できます。

まずは、この基本的な流れを理解しましょう。

 

OpenCVのインストール

PythonでOpenCVを使うためには、まずOpenCVライブラリをインストールする必要があります。

pip install opencv-python

このコマンドでOpenCVをインストールできます。

 

動画を保存するPythonコード

次に、簡単なPythonコードを書いてみましょう。

import cv2

# カメラを初期化
cap = cv2.VideoCapture(0)

# 動画保存の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret:
        # フレームを保存
        out.write(frame)

        # 表示
        cv2.imshow('frame', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 開放する
cap.release()
out.release()
cv2.destroyAllWindows()

このプログラムを実行すると、カメラでキャプチャした映像が保存されます。

 

コードの解説

VideoCaptureを使うと、カメラや動画ファイルから映像を取得できます。

VideoWriterは動画ファイルの出力に使われます。このとき、fourccでコーデックを指定します。

メインループでは、カメラからのフレームを順に取り出し、writeメソッドで動画として保存します。

 

なるほど…。でも、試したら動画が保存されないことがあるんだ。どうしてこんなことが起きるんだろう…。
猫男
猫男
catman
catman
キャプチャや保存の設定が原因かもしれない。次は、動画が保存できないときの対処法を確認しよう。

 

動画保存ができないときの対処法

動画保存がうまくいかない場合、いくつかの原因が考えられます。

以下に一般的な原因と対策を挙げます。

 

カメラデバイスの問題

カメラが正常に動作しているか確認してください。特に、他のアプリケーションがカメラを使用している場合、OpenCVから利用できないことがあります。

 

ファイルパス

保存先のディレクトリにアクセス権限があるか、指定したパスが有効かを確認します。不正なパスは保存の失敗につながります。

 

コーデックの問題

指定したfourccコーデックが正しく設定されているか確認しましょう。異なるコーデックを試すことも問題解決につながります。

fourcc = cv2.VideoWriter_fourcc(*'MJPG')

 

コマンドを使ったデバッグ方法

動画保存できない場合、OpenCVのバージョンやインストール状況も関係します。

以下のコマンドで情報を確認してみましょう。

python -m pip show opencv-python

これにより、インストールされているOpenCVのバージョンとパスを確認できます。

 

なるほど、原因を特定してみます!それでもうまくいかないならまた相談させてもらいます。
猫男
猫男
catman
catman
問題を切り分ければ、解決策が見えてくるよう。焦らずにトライしてみることだ。

 

練習問題

問題:

次のPythonコードを参考に、自分のカメラから映像をキャプチャし、5秒間だけ動画として保存してみてください。保存するファイルの名前は「sample_video.avi」とします。

import cv2

cap = cv2.VideoCapture(キャプチャデバイス番号)

fourcc = cv2.VideoWriter_fourcc(*'使用コーデック')
out = cv2.VideoWriter('ファイル名.形式', fourcc, フレームレート, (幅, 高さ))

while(x秒—タイマで測る等):
    ret, frame = cap.read()
    if ret:
        out.write(frame)
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

 
 

解答と解説

解答:

import cv2
import time

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('sample_video.avi', fourcc, 20.0, (640, 480))

start_time = time.time()
while (time.time() - start_time) < 5:
    ret, frame = cap.read()
    if ret:
        out.write(frame)

cap.release()
out.release()
cv2.destroyAllWindows()

解説:

cv2.VideoCapture(0)で、デフォルトのカメラデバイスを開きます。

cv2.VideoWriter_fourcc(*’XVID’)でXVIDコーデックを設定しました。これは一般的に使われるコーデックの一つです。

time.time()を使ってコードの開始からの経過時間を計測し、5秒間だけループを回しています。x秒で止める仕組みを簡単に実装できます。

プログラムの最後に、cap.release()out.release()でカメラとファイルを解放し、cv2.destroyAllWindows()で開いているウィンドウを閉じます。

設定した秒数を満たす前にループが終了することがないよう、start_timeからの差を比較している所がポイントです。

 

できました!これでうまく動画を保存できました!PythonとOpenCVって本当に便利なんですね!
猫男
猫男
catman
catman
そうさ、覚えるといろんなことに応用できるから、どんどん試してみるといいよう。新しいことを始める勇気が大切だ。

EARTHPG 自動化研究所

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

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