名前に現在時刻を入れたファイルが連番かどうか判定(後半)


press
名前に現在時刻を入れたファイルが連番かどうか判定(後半)

名前に現在時刻を入れたファイルが連番かどうか判定(後半)

前回からの続きです。

前回は連番になっていたらまとめてリスト化しましたが、今回はまとめたファイルを動画に変換して書き出します。

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

開発環境

$ python -V
Python 3.7.0

$ tree
.
├── dir.txt
├── requirements.txt
├── sequeucetovideo.py
└── video

モジュールのインストール

モジュールをインストールします。
リポジトリからクローンした場合は、以下のコマンドで必要なモジュールを一括インストールできます。

pip install -r requirements.txt

手動でインストールする場合は、以下のコマンドを入力します。

pip install opencv-python

コード

sequeucetovideo.py

import datetime
import glob

import cv2

f = open("dir.txt", "r")
files = sorted(glob.glob(f.read()))

split_file_name = ''
file_time_plus_one_seconds = ''

sequence_list = []
sequence_img = []

for file in files:
    split_name = file.split('-')

    file_time = datetime.datetime.strptime(split_name[2], '%Y%m%d%H%M%S')

    if not sequence_list:
        sequence_list.append(file)

        img = cv2.imread(file)
        sequence_img.append(img)
    elif split_file_name == file_time or file_time_plus_one_seconds == file_time:
        sequence_list.append(file)

        img = cv2.imread(file)
        sequence_img.append(img)
    else:
        first_file_split_name = sequence_list[0].split('.')
        first_file_split_name = first_file_split_name[0]
        first_file_split_name = first_file_split_name.split('/')
        first_file_split_name = first_file_split_name[-1]

        last_file_split_name = sequence_list[len(sequence_list) - 1].split('.')
        last_file_split_name = last_file_split_name[0]
        last_file_split_name = last_file_split_name.split('/')
        last_file_split_name = last_file_split_name[-1]

        height, width, layers = img.shape
        size = (width, height)

        name = 'video/' + first_file_split_name + '-to-' + last_file_split_name + '.mp4'
        out = cv2.VideoWriter(name, cv2.VideoWriter_fourcc(*'MP4V'), 3.0, size)

        for i in range(len(sequence_list)):
            out.write(sequence_img[i])
        out.release()

        sequence_list.clear()
        sequence_list.append(file)

        sequence_img.clear()
        img = cv2.imread(file)
        sequence_img.append(img)

    split_file_name = file_time
    file_time_plus_one_seconds = file_time + datetime.timedelta(seconds=1)

解説

sequence_img = []
動画変換用に連番ごとにまとめたファイルを格納するリストを生成

img = cv2.imread(file)
ファイルを読み込む

first_file_split_name = sequence_list[0].split('.')
first_file_split_name = first_file_split_name[0]
first_file_split_name = first_file_split_name.split('/')
first_file_split_name = first_file_split_name[-1]
リストの最初のファイル名を取得して.で区切る
.の前を名前を取得(.jpgの前のファイル名を取得)
今回はファイルが複数階層のディレクトリにあることを前提にしているので/で区切る
/で区切った最後の文字列を取得

last_file_split_name = sequence_list[len(sequence_list) - 1].split('.')
last_file_split_name = last_file_split_name[0]
last_file_split_name = last_file_split_name.split('/')
last_file_split_name = last_file_split_name[-1]
リストの最後のファイル名を取得して.で区切る
.の前を名前を取得(.jpgの前のファイル名を取得)
今回はファイルが複数階層のディレクトリにあることを前提にしているので/で区切る
/で区切った最後の文字列を取得

name = 'video/' + first_file_split_name + '-to-' + last_file_split_name + '.mp4'
新しく生成する動画ファイルの名前を生成
今回はvideoフォルダにリストの最初のファイル名と最後のファイル名の間に-to-をはさんだ名前を生成

out = cv2.VideoWriter(name, cv2.VideoWriter_fourcc(*'MP4V'), 3.0, size)
mp4ファイルを生成


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

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




    Show Comments (0)

    Comments

    Related Articles

    Other

    GitHub CopilotをPyCharmで使用するまでの手順

    GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]

    Posted on by press
    AWS

    AWSのCloud9を使ってPythonのプログラミング研修を開催

    AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]

    Posted on by press