[コピペOK]Pythonで動画にカウントダウンタイマーを追加する方法!

業務効率化

※当サイトは、アフィリエイト広告を利用しています。

この記事ではOpenCVというライブラリを使用して、動画にタイマーを追加する方法をご紹介します。

コピペだけで以下のように簡単にタイマーを動画に入れることが可能です。

この記事で分かる事

  • 動画にタイマーを組み込む方法がわかります。
  • コピペするだけで、簡単におしゃれなタイマーを作ることができます。

また本記事ではスクリプトの各部分も詳しく説明し、各行のコードが何をしているのか、なぜそれが必要なのかを初心者にもわかりやすく解説します。

最後には、スクリプトをカスタマイズして、自分のニーズに合わせて動画にタイマーを追加できるようになりますのぜ是非参考にしてください。

OpenCVって何?

OpenCVは、”Open Source Computer Vision Library”の略で、動画に関するタスクを行うためのオープンソースのライブラリです。

スポンサーリンク

RYOTA

34歳化学メーカー研究職。製造・営業・研究開発を経験。『研究開発に戻りたい』という思いから転職活動を開始。中堅化学メーカーから業界最大手へと転職し、300万以上の年収アップに成功。

👉【体験談】30代で大手化学メーカー研究職に転職!年収300万UPできた理由

自身の体験を基に転職やキャリアに関わる情報を発信中。

私自身も利用した、最もおすすめの転職エージェントは以下の2社です!

■研究職を目指すならコレ!
アカリクキャリア
→院卒者(修士・博士)専門、研究職に特化した転職エージェントです。

■転職後の定着率97.5%
マイナビメーカーAGENT
→メーカー専門、技術職に特化したエージェントです。

Pythonで動画にカウントダウンタイマーを追加する方法

とりあえずタイマーを動画に組み込みたい方は以下のコードで実行できます!

1つ1つの箇所に説明もいれていますので、参考に数字なども変えることで設定を変更できます。

import cv2 #cv2というライブラリを読み込みます。
import numpy as np

def add_timer_to_video(video_path, output_path):
    # ビデオを読み込む
    cap = cv2.VideoCapture(video_path)
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
    
    total_seconds = 25*60
    font = cv2.FONT_HERSHEY_COMPLEX  # フォントをおしゃれに
    font_scale = 6  # フォントサイズを大きくする
    font_thickness = 3
    color = (255, 255, 255)  # Red

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        # タイマーをテキストとして生成
        mins, secs = divmod(total_seconds, 60)
        secs = int(secs)
        timer_text = "{:02d}:{:02d}".format(int(mins), secs)

        # テキストのサイズを取得
        (text_width, text_height), _ = cv2.getTextSize(timer_text, font, font_scale, font_thickness)
        
        # テキストをフレームの右下に書き込む
        #x = width - text_width - 60  # 10pxのマージンを右に追加
        #y = height - 110  # 10pxのマージンを下に追加
        #cv2.putText(frame, timer_text, (x, y), font, font_scale, color, font_thickness, lineType=cv2.LINE_AA)
        
        # テキストをフレームの中心に配置
        x = (width - text_width) // 2
        y = (height + text_height) // 2
        cv2.putText(frame, timer_text, (x, y), font, font_scale, color, font_thickness, lineType=cv2.LINE_AA)

        # 更新後のフレームを保存
        out.write(frame)

        # 次の秒に進む
        total_seconds -= 1/fps

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


video_path = "C:/Users/obata/downloads/a.mp4"
output_path = "C:/Users/obata/デスクトップ/p2.mp4"
add_timer_to_video(video_path, output_path)
スポンサーリンク

コードの解説

add_timer_to_videoという関数を使って、入力動画に25分間のカウントダウンタイマーを追加し、新しい動画として保存します。

インポート

import cv2
import numpy as np

OpenCV(cv2)とnumpyをインポートしています。

numpyとは?

numpyはPythonのライブラリで、大量の数値データを効率的に扱ったり、数学的な計算を高速で行うための機能を提供しています。特に、ベクトルや行列などの配列計算に優れています。

関数定義

def add_timer_to_video(video_path, output_path):

add_timer_to_videoという関数を定義しています。この関数は2つの引数を持っています。

・video_path: 入力動画のパス

・output_path: タイマー付きの動画を保存するパス

動画の読み込みと基本情報の取得

cap = cv2.VideoCapture(video_path)
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))

ここでは入力動画を読み込み、基本情報(FPS、幅、高さ)を取得しています。また、出力動画の設定も行っています。

タイマーの設定

total_seconds = 25*60
font = cv2.FONT_HERSHEY_COMPLEX
font_scale = 6
font_thickness = 3
color = (255, 255, 255)

この部分で、タイマーとして表示するテキストの設定をしています。合計時間は25分(1500秒)です。

動画のフレームごとの処理

while cap.isOpened():

このループで、入力動画の各フレームを処理しています。

タイマーのテキストを生成

mins, secs = divmod(total_seconds, 60)
secs = int(secs)
timer_text = "{:02d}:{:02d}".format(int(mins), secs)

タイマーとして表示するテキストを生成しています。

テキストのサイズを取得

(text_width, text_height), _ = cv2.getTextSize(timer_text, font, font_scale, font_thickness)

テキストのサイズを取得しています。

テキストをフレームの中心に配置

x = (width - text_width) // 2
y = (height + text_height) // 2
cv2.putText(frame, timer_text, (x, y), font, font_scale, color, font_thickness, lineType=cv2.LINE_AA)

テキストを画像の中心に追加しています。

この数字の”2″を変えることで、タイマーを移動させることができます。

更新後のフレームを保存

out.write(frame)

更新後のフレームを出力動画に書き込んでいます。

次の秒に進む

total_seconds -= 1/fps

total_seconds -= 1/fps

リソースの解放

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

動画の読み書きに使用したリソースを解放しています。

使用方法

video_path = "C:/Users/obata/downloads/a.mp4"
output_path = "C:/Users/obata/デスクトップ/p2.mp4"
add_timer_to_video(video_path, output_path)

この部分では、指定された入力動画に25分間のカウントダウンタイマーを追加し、新しい動画として保存しています。

コメント