derenotes.libs.image.video module

動画ファイルから画像を取り出すためのモジュール。

目的:

入力 から 任意のタイムスタンプ出力 を取り出す。

入力:

デレステのオートLIVEを録画した動画ファイル

  • 動画ファイルの形式: MP4

  • エンコード形式: H.264/AVC

出力:

kivy.graphics.texture への入力を前提にした画像フレーム(バッファ)

  • ピクセルフォーマット: rgb24

  • データ型: uint8 配列

手段:

FFMpeg共有ライブラリィから目的に合った機能を呼び出す。以下の機能は、取り扱わない。

  1. 画像のエンコード

  2. 音声や字幕のエンコードおよびデコード

背景:

可変フレームレートの動画ファイルのインデックス検索で問題があり、画像を取り出せなかった。

class Stream

ベースクラス: object

画像ストリームを扱う。

デレステ動画ファイルの画像ストリームを扱う。
画像ストリームから、任意のタイムスタンプに紐付いた画像フレーム(バッファ)を取り出す。
  • ピクセルフォーマット: rgb24

  • データ型: uint8 配列

音声および字幕のストリームは無視する。

パラメータ:
  • url (str) -- url形式のデレステ動画ファイル名。

  • file_type (str) -- デレステ動画ファイルの形式。デフォルトは mp4

  • hardware (str) --

    デコーダーに適用するハードウェア名。デフォルトは None

    ハードウェアデコーダーを有効にする場合は、ハードウェア名を指定する。

    例: "cuda", "vaapi", "vdpau", "vulkan" など

例外:

VIDEOError -- 動画ファイルのオープンに失敗、ストリーム情報の取得に失敗、デコーダーの初期化に失敗など

decoder_name

デコーダー名。

戻り値:

デコーダー名

戻り値の型:

str

dump()

画像ストリームの情報をデバック用ログに出力する。

戻り値の型:

None

frame_buffer(index)

画像フレーム(バッファ)を読み出す。

index に対応したタイムスタンプの画像フレーム(バッファ)を読み出す。
kivy.graphics.texture へ渡すこと前提に、ピクセルフォーマット rgb24 および uint8 配列に整形し、
画像フレームが見つからなかった際には、 画面相当の画像フレーム(バッファ)を返す。
範囲外のindexに対しては、エラー発生。
パラメータ:

index (int) -- 読み出したい画像フレームのインデックス

戻り値:

指定のインデックスの画像フレーム(バッファ)

戻り値の型:

bytes

例外:

VIDEOError -- 指定のインデックスが範囲外、ハードウェアデコーダー向けのデータ変換に失敗

hardware_supported_by_codecs

デコーダーで利用可能なハードウェア名の一覧。

戻り値:

デコーダーで利用可能なハードウェア名の一覧

戻り値の型:

str

height

画像の高さ。

戻り値:

画像の高さ

戻り値の型:

int

nearby_keyframe_buffer(index, nearby_keyframe)

近傍のキーフレームの画像フレーム(バッファ)を読み出す。

index から nearby_keyframeGOP 単位)離れた近傍のIフレームの画像フレーム(バッファ)を読み出す。
範囲外の場合には、"黒"画面相当の画像フレーム(バッファ)を返す。
パラメータ:
  • index (int) -- 画像フレームのインデックス

  • nearby_keyframe (int) -- 近傍のキーフレームへの間隔( GOP 単位)

戻り値:

近傍のキーフレームの画像フレーム(バッファ)

戻り値の型:

bytes

pixel_format

ピクセルフォーマット名。

戻り値:

ピクセルフォーマット名

戻り値の型:

str

time_base

時間単位(秒)。

戻り値:

時間単位(秒)

戻り値の型:

Fraction(分子, 分母)

timestamp(index)

画像フレームの index をタイムスタンプに変換する。

パラメータ:

index (int) -- タイムスタンプを取得したい画像フレームのインデックス

戻り値:

指定のインデックスの画像フレームのタイムスタンプ

戻り値の型:

int

例外:

VIDEOError -- 指定のインデックスが範囲外

total_frames

動画ファイル内の総フレーム数。

戻り値:

総フレーム数

戻り値の型:

int

video_path

動画ファイルのパス。

戻り値:

動画ファイルのパス

戻り値の型:

Path

width

画像の幅。

戻り値:

画像の幅

戻り値の型:

int

exception VIDEOError(*args)

ベースクラス: Exception

videoモジュールのエラーハンドラ。

info_ffmpeg()

FFMpeg関連共有ライブラリィの情報をログ出力する。

戻り値の型:

None