Python逆引き大全|初心者から実務まで使える動画処理の実践テクニック 動画処理編!

Pythonを使用した動画処理は、多くの場面で役立つスキルです。本記事では、動画の読み込みから高度な編集、ストリーミング実装までを徹底解説します。

動画の読み込みと再生

動画を読み込んで再生するには、cv2(OpenCV)ライブラリを使用します。

import cv2

video_path = "sample_video.mp4"
cap = cv2.VideoCapture(video_path)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

ポイント

  • 動画ファイルのパスを指定し、フレームごとに読み取ります。
  • cv2.imshowを使って動画を表示します。

動画フレームの抽出

動画をフレームごとに画像として保存する方法を説明します。

import cv2

video_path = "sample_video.mp4"
output_dir = "frames/"
cap = cv2.VideoCapture(video_path)
frame_number = 0

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imwrite(f"{output_dir}frame_{frame_number}.jpg", frame)
    frame_number += 1

cap.release()

ポイント

  • 各フレームを画像ファイルとして保存可能です。
  • フォルダパスを事前に作成しておきましょう。

動画の形式変換

動画の形式を変換するには、moviepyを使用します。

from moviepy.editor import VideoFileClip

clip = VideoFileClip("sample_video.mp4")
clip.write_videofile("output_video.avi", codec="libx264")

ポイント

  • moviepyは簡単に動画の形式を変換できます。
  • 出力形式に応じて適切なコーデックを選択してください。

動画のトリミング

動画の一部を切り出す方法です。

from moviepy.editor import VideoFileClip

clip = VideoFileClip("sample_video.mp4")
trimmed_clip = clip.subclip(10, 20)
trimmed_clip.write_videofile("trimmed_video.mp4")

ポイント

  • subclipメソッドを使用して開始時間と終了時間を指定します。

動画の結合

複数の動画を結合する方法です。

from moviepy.editor import concatenate_videoclips, VideoFileClip

clip1 = VideoFileClip("video1.mp4")
clip2 = VideoFileClip("video2.mp4")
final_clip = concatenate_videoclips([clip1, clip2])
final_clip.write_videofile("merged_video.mp4")

ポイント

  • 動画クリップのリストをconcatenate_videoclipsに渡します。

動画に字幕を追加

動画に字幕を追加する方法です。

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip

clip = VideoFileClip("sample_video.mp4")
text = TextClip("Hello, World!", fontsize=70, color="white")
text = text.set_position("bottom").set_duration(clip.duration)
final_clip = CompositeVideoClip([clip, text])
final_clip.write_videofile("subtitled_video.mp4")

ポイント

  • TextClipでテキストを作成し、CompositeVideoClipで合成します。

解像度の変更

動画の解像度を変更する方法です。

import cv2

cap = cv2.VideoCapture("sample_video.mp4")
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("resized_video.avi", fourcc, 30.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    resized_frame = cv2.resize(frame, (640, 480))
    out.write(resized_frame)

cap.release()
out.release()

ポイント

  • cv2.resizeでフレームのサイズを変更します。

動画の回転

動画を回転させる方法です。

import cv2

cap = cv2.VideoCapture("sample_video.mp4")
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("rotated_video.avi", fourcc, 30.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    rotated_frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
    out.write(rotated_frame)

cap.release()
out.release()

ポイント

  • cv2.rotateを使用してフレームを回転させます。

動画ストリーミングの実装

動画ストリーミングを実装するには、FlaskOpenCVを使用します。

from flask import Flask, Response
import cv2

app = Flask(__name__)

@app.route("/video")
def video_stream():
    cap = cv2.VideoCapture("sample_video.mp4")

    def generate():
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
            _, buffer = cv2.imencode('.jpg', frame)
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + buffer.tobytes() + b'\r\n')

    cap.release()
    return Response(generate(), mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == "__main__":
    app.run(debug=True)

ポイント

  • Flaskを使ってストリーミングサーバーを構築します。

動画データ解析

動画データを解析して特定の情報を抽出します。

import cv2

cap = cv2.VideoCapture("sample_video.mp4")
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frame_rate = cap.get(cv2.CAP_PROP_FPS)
duration = frame_count / frame_rate

print(f"Frame Count: {frame_count}")
print(f"Frame Rate: {frame_rate}")
print(f"Duration: {duration} seconds")

cap.release()

ポイント

  • 動画のフレーム数や再生時間を計算します。

まとめ

Pythonを使用した動画処理は、シンプルなタスクから高度な編集、ストリーミングまで多岐にわたります。本記事で紹介したテクニックを活用して、独自の動画プロジェクトに挑戦してください。Pythonのライブラリを駆使することで、効率的かつ柔軟な動画処理が可能です。

このサイトを稼働しているVPSはこちら

コメント

タイトルとURLをコピーしました