Open1

mp4 ファイルを静止画に変換しつつ .h5 (hdf5) を生成するコードスニペット

PINTOPINTO
01_mp4_to_hdf5.py
"""
MP4ファイルを静止画化してさらに .h5 ファイルに変換するスクリプト

1. pip install opencv-python h5py
2. mp4_file_name のファイル名を変更してからこのスクリプトを実行
3. 生成された .h5 ファイルを Google Drive にアップロード
"""

import os
import cv2
import h5py

def video_to_hdf5(video_path, hdf5_path):
    # OpenCVを使って動画を読み込む
    cap = cv2.VideoCapture(video_path)

    # フレーム数とフレームのサイズを取得
    num_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))

    # HDF5ファイルを書き込みモードで開く
    with h5py.File(hdf5_path, 'w') as hf:
        # データセットを作成(動画のフレーム数、高さ、幅、3(色チャンネル)の形状を持つ)
        dset = hf.create_dataset('video', (num_frames, frame_height, frame_width, 3), dtype='uint8')

        # 各フレームを読み込み、HDF5ファイルに保存
        for i in range(num_frames):
            ret, frame = cap.read()
            if not ret:
                print(f"Failed to retrieve frame {i}")
                break
            dset[i] = frame

    cap.release()
    print(f"Saved video to {hdf5_path}")


mp4_file_name = 'test.mp4'
base_name = os.path.splitext(mp4_file_name)[0]
video_to_hdf5(f'{base_name}.mp4', f'{base_name}.h5')
02_view_hdf5_images.py
"""
.h5 ファイルの中の画像を表示して確認するスクリプト

1. pip install opencv-python h5py
2. hdf5_path のファイル名を変更してからこのスクリプトを実行
"""

import os
import cv2
import h5py
import mimetypes

def display_frame_from_hdf5(hdf5_path):
    print(mimetypes.guess_type(hdf5_path)[0].split('/'))
    print(mimetypes.guess_type(hdf5_path)[0].split('/')[0])
    print(os.path.splitext(hdf5_path))
    with h5py.File(hdf5_path, 'r') as hf:
        for index in range(len(hf['video'])):
            # データセットから指定したインデックスのフレームを読み取る
            frame = hf['video'][index]
            # OpenCVを使って画像を表示
            cv2.imshow('Frame', frame)
            key = cv2.waitKey(0)
            if key == 27: # ESC
                break
    cv2.destroyAllWindows()

# 使用例
hdf5_path = 'test.h5'

display_frame_from_hdf5(hdf5_path)