[Python コピペOK]動画を指定した秒数まで繰り返して伸ばすコード

この記事を書いた人

総合化学メーカーで研究開発・新規事業開発を担当。

化学や事業開発に関する情報を「分かりやすく、深く理解できる」ことを目指して発信中。

昨年は葛藤の中転職活動を行い、最初は苦労するも自らの視座が高まったことから転職活動についても積極的に情報発信しています!

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

業務効率化

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

短い動画を繰り返して、長めの1つの動画に拡張したいような場面はありませんか?

今回はそのコードを紹介しますので、是非参考にしてください。

コピーするだけで簡単に使えます!

勉強に活用したい方は、詳細な解説も載せていますので、そちらも参考にしてください。

コードの簡単な説明

例えば1分間の動画を30分間繰り返した動画を作りたい場合。

まずは1分間の動画を30分以上の動画になるようにループさせます。そして最終的にその動画を30分にトリミングすることで動画を作成しています。

スポンサーリンク

[コピペOK]動画を指定した秒数まで繰り返して伸ばすコード

import cv2

def loop_video_to_duration(input_path, output_path, desired_duration):
    cap = cv2.VideoCapture(input_path)

    # 動画のFPS、FourCC、幅、高さを取得
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 出力動画の設定
    out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))

    # 元動画の総フレーム数と時間を計算
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    video_duration = total_frames / fps

    # 必要なループ回数を計算
    loops_required = int(desired_duration / video_duration) + 1

    # 指定の時間を超えるまで動画をループさせる
    for _ in range(loops_required):
        cap.set(cv2.CAP_PROP_POS_FRAMES, 0)  # 動画の先頭に戻る
        current_frame = 0
        while current_frame < total_frames:
            ret, frame = cap.read()
            if not ret:
                break
            out.write(frame)
            current_frame += 1

    out.release()
    cap.release()

# 使用方法
input_video_path =  "入力するファイル"
output_video_path =  "出力するファイル名"
desired_duration_in_seconds = 60*25  # 例: 25分 ここに伸ばしたい時間を記載してください。

loop_video_to_duration(input_video_path, output_video_path, desired_duration_in_seconds)
スポンサーリンク

コードの解説

このコードは、入力動画を指定した期間になるまでループさせて出力する関数を定義しています。以下に、このコードの詳細な解説を行います。

コードの概要

loop_video_to_durationという関数を使って、入力動画を指定した持続時間まで繰り返し(ループさせて)新しい動画を作成します。

ライブラリのインポート

import cv2

OpenCV(cv2)をインポートしています。OpenCVは、画像や動画の処理を行うためのライブラリです。

関数定義

def loop_video_to_duration(input_path, output_path, desired_duration):

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

  • input_path: 入力動画のパス
  • output_path: ループさせた後の動画を保存するパス
  • desired_duration: 出力動画の希望する持続時間(秒単位)

動画の読み込み

cap = cv2.VideoCapture(input_path)

input_pathで指定された動画ファイルを読み込んでいます。

動画の基本情報の取得

fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc(*'XVID')
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

この部分では、動画の基本情報を取得しています。

  • fps: 動画のフレームレート(1秒あたりのフレーム数)
  • fourcc: 動画のコーデック(この場合、’XVID’コーデックを使用しています)
  • widthheight: 動画の幅と高さ

出力動画の設定

out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))

出力動画の設定をしています。出力動画は、入力動画と同じフレームレート、コーデック、解像度で保存されます。

元動画の総フレーム数と時間を計算

total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
video_duration = total_frames / fps

入力動画の総フレーム数と全体の持続時間を計算しています。

必要なループ回数の計算

loops_required = int(desired_duration / video_duration) + 1

入力動画を何回繰り返す必要があるかを計算しています。少しでも指定の期間を超えるように、+1しています。

動画のループ

for _ in range(loops_required):
    cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
    current_frame = 0
    while current_frame < total_frames:
        ret, frame = cap.read()
        if not ret:
            break
        out.write(frame)
        current_frame += 1

入力動画をloops_required回数だけループさせて、新しい動画にフレームを書き込んでいます。

リソースの解放

out.release()
cap.release()

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

使用方法

input_video_path =  "入力するファイル"
output_video_path =  "出力するファイル名"
desired_duration_in_seconds = 60*25  # 例: 25分

loop_video_to_duration(input_video_path, output_video_path, desired_duration_in_seconds)

この部分では、入力動画を25分間になるようにループさせ、出力動画として保存しています。

以上が、コードの詳細な解説となります。

コメント