OpenCVで複数の動画を連結する


press
OpenCVで複数の動画を連結する

OpenCVで複数の動画を連結する

複数の動画素材を結合したり、GoProで長時間撮影した時に約4GB毎に分割される動画ファイルを結合して一つの動画を書き出す方法です。

コードはGitHubリポジトリにあげています。

開発環境

$ python -V
Python 3.9.0

$ tree
├── combine.py
├── combine_output.mp4
└── media
     ├── cat_001.mp4
     ├── cat_002.mp4
     └── cat_003.mp4

ソースコード

combine.py

import cv2
import glob


def combine_movie():
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')

    files = sorted(glob.glob('media/*.mp4'))

    movie = cv2.VideoCapture(files[0])
    fps = movie.get(cv2.CAP_PROP_FPS)
    height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width = movie.get(cv2.CAP_PROP_FRAME_WIDTH)

    output = cv2.VideoWriter('combine_output.mp4', int(fourcc), fps, (int(width), int(height)))

    frame = None

    for i in files:
        movie = cv2.VideoCapture(i)

        if movie.isOpened():
            ret, frame = movie.read()
        else:
            ret = False

        while ret:
            output.write(frame)
            ret, frame = movie.read()


if __name__ == '__main__':
    combine_movie()

解説

import cv2
import glob
モジュールのインストール

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
動画のコーデックを指定

files = sorted(glob.glob('media/*.mp4'))
mediaフォルダの拡張子がmp4のファイルを全て指定してfilesに格納

movie = cv2.VideoCapture(files[0])
fps = movie.get(cv2.CAP_PROP_FPS)
height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = movie.get(cv2.CAP_PROP_FRAME_WIDTH)
フォルダから一つ動画を読み込みプロパティ(属性)を取得

output = cv2.VideoWriter('combine_output.mp4', int(fourcc), fps, (int(width), int(height)))
出力する動画ファイルの情報を

for i in files:
filesに格納された動画ファイルを1ファイルづつ繰り返し追加


人気のタグ

Beautiful Soup calender Channels charset ChromeDriver datetime Docker gettext GitHub glob Google Colaboratory Gunicorn i18n Matplotlib Nginx OpenCV pandas Pillow Pipenv PostgreSQL psycopg2 PyCharm PyCon pyenv random Redis ReportLab requests Selenium timedelta Ubuntu uWSGI venv


株式会社ファントムへのお問い合わせ

当ブログは群馬県でPythonを使ったAIやシステムを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Django

    Djangoで日本語文字列のQuerySetを五十音順でソートする

    DjangoのWEBアプリケーションでQuerySetの表示順を五十音順にしたら、開発環境では五十音順で表示されているのに本番環境では五十音順になっていないときの対処法です。(中途半端に五十音順になっていて、4、5件毎に […]

    Posted on by press
    Django

    DjangoでDateTimeFieldが今日のデータを取得する方法

    Djangoのモデル上でDateTimeField型のデータが今日の日付のデータを取得する方法です。 1つ目00:00:00から23:59:59までの範囲を条件に取得します。 2つ目今日の日付が含まれるものを条件に取得し […]

    Posted on by press