知識マップ: Media FoundationでMP4の指定時刻から静止画を切り出す方法

記事「Media FoundationでMP4の指定時刻から静止画を切り出す方法」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事は、Media FoundationのIMFSourceReaderを使ってMP4から指定時刻に最も近い1枚の静止画を取り出す方法を整理している。SetCurrentPositionによるseekはexactではなく通常キーフレーム側へ寄るため、GOPが長い動画ほど誤差が生じやすく、seek後にReadSampleを繰り返してtimestampの前後を比較する必要がある。ReadSampleは成功していてもサンプルがnullのことがあるため確認が要る。取り出したMFVideoFormat_RGB32のフレームは、strideと上下向きをIMF2DBuffer::Lock2Dで吸収してtop-downのBGRAへ整形し、4バイト目をalphaとして0xFFに固定してから、WICでPNGとして保存することで、意図しない透明PNGになる不具合を防いでいる。

MP4からの静止画抽出(Media Foundation)の知識マップIMFSourceReaderによるSetCurrentPositionのseekがキーフレーム側へ寄ること、GOPの長さとReadSampleでの前後比較の関係、strideとtop-down/bottom-upの向きをLock2Dで吸収する処理、RGB32の4バイト目をalphaとして固定してWICでPNG保存するまでの関係を示す図。利用する前提とする利用する前提とする原因になり得る利用する前提とする前提とする利用する前提とする原因になり得る防止する利用する利用する原因になり得る動画からの静止画抽出(指定時刻のフレーム取得)IMFSourceReader(Source Reader)Media FoundationSetCurrentPositionによるseekIMFSourceReader::ReadSampleGOP(Group of Pictures)キーフレーム(key frame)stride(画像の行送りバイト数)IMF2DBuffer::Lock2Dtop-down / bottom-up(画像の上下向き)MFVideoFormat_RGB32意図しない透明PNGalphaの0xFF固定WIC(Windows Imaging Component)ReadSampleのnullサンプル

概念間の関係(全15件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

動画からの静止画抽出(指定時刻のフレーム取得)
動画ファイルの中から、指定した時刻に最も近い1枚のフレームを非圧縮画像として取り出す処理。
IMFSourceReader(Source Reader)
Media Foundationが提供する、メディアファイルからサンプルを同期的または非同期的に読み出すための入口となるインターフェイス。
SetCurrentPositionによるseek
IMFSourceReaderで指定時刻へ移動する操作。exact seekingを保証せず、通常は指定位置の少し前、特にキーフレーム側へ寄る。
GOP(Group of Pictures)
あるキーフレームから次のキーフレームの直前までのフレームのまとまり。長いほどキーフレームの間隔が空く。
stride(画像の行送りバイト数)
画像バッファで1行分が占めるバイト数。幅×1画素のバイト数と一致するとは限らず、行末にpaddingが入ることがある。
MFVideoFormat_RGB32
Media Foundationの32bit RGBピクセル形式。byte0-2がB,G,Rで、byte3はalphaとは限らずARGB32ではない。
alphaの0xFF固定
保存前に画像バッファの4バイト目(alpha)へ0xFFを書き込み、完全に不透明な状態に固定する処理。
IMFSourceReader::ReadSample
IMFSourceReaderからデコード済みのサンプルを1枚ずつ取得するメソッド。成功していてもサンプルがnullのことがある。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。