Main Content

VideoReader

ビデオ ファイルを読み取るオブジェクトの作成

説明

VideoReader オブジェクトは、ビデオ データを含むファイルの読み取りに使用します。このオブジェクトにはビデオ ファイルに関する情報が格納されており、ビデオからデータを読み取ることができます。関数 VideoReader を使用して VideoReader オブジェクトを作成し、オブジェクトのプロパティを使用してビデオに関する情報をクエリしてから、オブジェクト関数を使用してビデオを読み取ることができます。

詳細については、ビデオおよびオーディオ ファイルのサポート形式を参照してください。

作成

説明

v = VideoReader(filename) は、filename という名前のファイルからビデオ データを読み取るオブジェクト v を作成します。

v = VideoReader(filename,Name,Value) は、名前と値の引数を使用して CurrentTimeTagUserData の各プロパティを設定します。たとえば、VideoReader('myfile.mp4','CurrentTime',1.2) は、ビデオの先頭から 1.2 秒後に読み取りを開始します。名前と値の引数は複数指定することができます。各プロパティの名前を一重引用符で囲み、その後に対応する値を指定します。

入力引数

すべて展開する

ファイル名。文字ベクトルまたは string スカラーとして指定します。

詳細については、ビデオおよびオーディオ ファイルのサポート形式を参照してください。

例: 'myFile.mp4'

例: '../dir/videos/myFile.avi'

データ型: char | string

プロパティ

すべて展開する

VideoReader オブジェクトには、ビデオ ファイルに関する情報を格納するプロパティがあります。プロパティは、CurrentTimeTag および UserData を除いて読み取り専用です。プロパティの値はオブジェクトの作成後に表示や変更が可能です。たとえば、次のコマンドで VideoReader オブジェクト vDuration プロパティの値を確認します。

D = v.Duration;

この プロパティ は読み取り専用です。

ビデオ データのピクセルあたりのビット数。数値スカラーとして指定します。

データ型: double

読み取るビデオ フレームのタイムスタンプ。数値スカラーとして指定します。タイムスタンプはビデオ ファイルの始まりからの秒数で指定されます。CurrentTime の値は、ゼロからビデオの継続時間までの間の値です。

プラットフォームによっては、VideoReader オブジェクトを作成するときに、'CurrentTime' プロパティに正確に 0 ではないが、0 に近い値が含まれる場合があります。'CurrentTime' プロパティのこの値の変動は、各プラットフォームがビデオを処理し読み取る方法の違いに起因します。

例: 5.6

データ型: double

この プロパティ は読み取り専用です。

ファイルの長さ (秒単位)。数値スカラーとして指定します。

データ型: double

この プロパティ は読み取り専用です。

1 秒あたりのビデオ フレーム数。数値スカラーとして指定します。可変フレーム レートのビデオの場合、FrameRate は平均フレーム レートを示します。

メモ: OS X Yosemite (Version 10.10) 以降では、VideoWriter を使用して書き込まれた MPEG-4/H.264 ファイルは正しく再生されますが、不正確なフレーム レートが表示されます。

データ型: double

この プロパティ は読み取り専用です。

ビデオ フレームの高さ (ピクセル単位)。数値スカラーとして指定します。

データ型: double

この プロパティ は読み取り専用です。

ファイル名。文字ベクトルまたは string スカラーとして指定します。

データ型: char | string

この プロパティ は読み取り専用です。

ビデオ ストリームのフレーム数。数値スカラーとして指定します。

メモ

特定の長さのビデオでは、NumFrames プロパティ値をすぐに使用できない場合があります。NumFrames プロパティを取得するには、コマンド ラインに v.NumFrames を入力します。

データ型: double

この プロパティ は読み取り専用です。

リーダー オブジェクトに関連付けられているビデオ ファイルの絶対パス。文字ベクトルまたは string スカラーとして指定します。

データ型: char | string

汎用テキスト。文字ベクトルまたは string スカラーとして指定します。

例: 'Experiment 109'

データ型: char | string

ユーザー定義データ。任意のデータ型の値として指定します。

この プロパティ は読み取り専用です。

MATLAB でのビデオ形式の表現。文字ベクトルまたは string スカラーとして指定します。

Motion JPEG 2000 ファイル以外の種類のファイルでは、VideoFormat の値は次のいずれかになります。

ビデオ形式

VideoFormat の値

RGB24 ビデオの AVI または MPEG-4 ファイル

'RGB24'

インデックス付きビデオの AVI ファイル

'Indexed'

グレースケール ビデオの AVI ファイル

'Grayscale'

Motion JPEG 2000 ファイルでは、VideoFormat の値は次のいずれかになります。

イメージ データの形式

VideoFormat の値

単一帯域 uint8'Mono8'
単一帯域 int8'Mono8 Signed'
単一帯域 uint16'Mono16'
単一帯域 int16'Mono16 Signed'
3 帯域 uint8'RGB24'
3 帯域 int8'RGB24 Signed'
3 帯域 uint16'RGB48'
3 帯域 int16'RGB48 Signed'

データ型: char | string

この プロパティ は読み取り専用です。

ビデオ フレームの幅 (ピクセル単位)。数値スカラーとして指定します。

データ型: double

オブジェクト関数

hasFrameビデオ フレームが読み取り可能かどうかを判別
read1 つ以上のビデオ フレームの読み取り
readFrame次のビデオ フレームの読み取り
VideoReader.getFileFormatsVideoReader でサポートされているファイル形式

すべて折りたたむ

サンプル ビデオ ファイル xylophone_video.mp4VideoReader オブジェクトを作成します。

v = VideoReader("xylophone_video.mp4");

ビデオから、1 フレームずつすべてのフレームを読み取ります。

while hasFrame(v)
    frame = readFrame(v);
end

readFrame によって返された最後のフレームに関する情報を表示します。

whos frame
  Name         Size                Bytes  Class    Attributes

  frame      240x320x3            230400  uint8              

VideoReader オブジェクトをクリアします。

clear v

サンプル ビデオ ファイル xylophone_video.mp4VideoReader オブジェクトを作成します。

v = VideoReader("xylophone_video.mp4");

ビデオの先頭から 2.5 秒後にフレームの読み取りを開始するように指定します。

v.CurrentTime = 2.5;

フレームを表示する axes オブジェクトを作成します。次に、読み取り可能なフレームがなくなるまで、ビデオ フレームの読み取りと表示を続行します。

currAxes = axes;
while hasFrame(v)
    vidFrame = readFrame(v);
    image(vidFrame,"Parent",currAxes)
    currAxes.Visible = "off";
    pause(1/v.FrameRate)
end

Figure contains an axes object. The axes object contains an object of type image.

Figure contains an axes object. The axes object contains an object of type image.

VideoReader オブジェクトをクリアします。

clear v

サンプル ビデオ ファイル xylophone_video.mp4VideoReader オブジェクトを作成します。

v = VideoReader("xylophone_video.mp4");

最初のビデオ フレームだけを読み取ります。

firstFrame = read(v,1);

最後のビデオ フレームだけを読み取ります。

lastFrame = read(v,Inf);

フレーム 5 から 10 を読み取ります。

earlyFrames = read(v,[5 10]);

50 フレーム目からビデオ ファイルの最後までを読み取ります。

lateFrames = read(v,[50 Inf]);

ビデオ フレーム変数のサイズと型の情報を表示します。

whos *Frame*
  Name               Size                     Bytes  Class    Attributes

  earlyFrames      240x320x3x6              1382400  uint8              
  firstFrame       240x320x3                 230400  uint8              
  lastFrame        240x320x3                 230400  uint8              
  lateFrames       240x320x3x92            21196800  uint8              

VideoReader オブジェクトをクリアします。

clear v

フレーム インデックスを指定してビデオから 1 フレームを読み取り、次にビデオの残りのフレームを 1 フレームずつ読み取ります。

VideoReader オブジェクトを作成し、CurrentTime プロパティ値を表示します。CurrentTime プロパティ値 0 は、ビデオからフレームが読み取られていないことを示します。

vidObj = VideoReader("xylophone_video.mp4");
vidObj.CurrentTime
ans = 0

フレーム インデックスを指定して、ビデオから 20 番目のフレームを読み取ります。次に、CurrentTime プロパティ値を表示します。read メソッドは、20 番目のフレームが読み取られたことを反映して、CurrentTime プロパティを自動的に更新します。

frame20 = read(vidObj,20);
vidObj.CurrentTime
ans = 0.6667

この時点で関数 readFrame を呼び出すと、21 番目のフレームが返されます。

readFrame メソッドを使用して、ビデオの残りのフレームを読み取ります。readFrame メソッドは、CurrentTime プロパティの時間に対応するフレームを返します。たとえば、次のコードは、21 番目のフレームからフレームの読み取りと表示を開始し、読み取るフレームがなくなるまで続行します。

while(hasFrame(vidObj))
    frame = readFrame(vidObj);
    imshow(frame)
    title(sprintf("Current Time = %.3f sec",vidObj.CurrentTime))
    pause(2/vidObj.FrameRate)
end

Figure contains an axes object. The axes object with title Current Time = 4.700 sec contains an object of type image.

VideoReader オブジェクトをクリアします。

clear vidObj

制限

  • 一部の MP4 ファイルでは、NumFrames プロパティは Windows®Mac、および Linux® の各プラットフォームで異なる値を返すことがあります。この違いは、基となるプラットフォーム固有の API の差異によるものです。

  • Windows 上の一部の AVI、MOV、または MP4 ファイルでは、関数 readFrame を使用してファイル内のすべてのフレームを読み取った結果のフレーム数が、VideoReader オブジェクトの NumFrames プロパティによって返される値と異なる場合があります。

ヒント

  • Windows プラットフォームでは、ワークスペース内の VideoReader オブジェクトで参照されている AVI ファイルを変更または削除することはできません。VideoReader オブジェクトをワークスペースから削除するには、関数 clear を使用します。

  • macOS プラットフォームでは、特定の古いビデオ ファイル形式がサポートされなくなりました。このようなファイルを VideoReader を使用して読み取るには、次を行います。

    • QuickTime プレーヤーを使用してビデオ ファイルを開きます。プレーヤーでファイルの形式が古いことが検出されると、自動的に新しい形式に変換されます。

    • 新しく変換されたビデオ ファイルを保存します。

    • VideoReader を使用して、この新しく変換されたビデオ ファイルを読み取ります。

拡張機能

バージョン履歴

R2010b で導入

すべて展開する