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ファイルづつ繰り返し追加


人気のタグ

api argparse Beautiful Soup black calender Channels charset ChromeDriver datetime Docker enumerate f-string File Watcher flake8 gettext GitHub glob Google Colaboratory GPU Gunicorn i18n Jupyter Matplotlib Nginx OpenCV pandas Pillow pip Pipenv PostgreSQL psycopg2 PyCharm PyCon pyenv PyTorch random Redis ReportLab requests Selenium slack timedelta Ubuntu uWSGI venv


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

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Django

    pipenv shellをしてもactivateできない

    pipenv shellをしてもactivateできない pipenvで作った仮想環境に出たり入ったりを繰り返していると、pipenv shellをしても以下のようにShell for UNKNOWN_VIRTUAL_E […]

    Posted on by press
    Python

    PyCharmとDockerの開発環境でのコードフォーマット

    PyCharmとDockerの開発環境でのコードフォーマット 14インチのMacBook Proを新調してから開発環境をPyCharmとDockerで統一することにしました。Dockerはコンテナ単位で環境構築ができるの […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録すると株式会社ファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません