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

業務効率化

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

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

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

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

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

コードの簡単な説明

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

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

スポンサーリンク

RYOTA

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

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

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

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

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

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

[コピペ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分間になるようにループさせ、出力動画として保存しています。

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

コメント