2017-08-11 7 views
2

ビデオのプロパティをメディアファイルから抽出します。より正確には、私は興味があります:DirectShowでビデオのプロパティを取得する

幅、高さ、継続時間、フレームレート、ビットレート、フレームカウント、コーデック

は、これまでのところ、私がやっていること:

私はGraphBuilder(pGraph)構築してきました。

IMediaSeekingインターフェイスを取得します。

IはデコーダがISampleGrabberに

を使用してフレームをデコードされるIからの高さ、幅及び平均サンプル時間を取得し(フレームレート=平均サンプル時間*サンプル数を計算する)ために管理動的フレームカウントを得ますIBasicVideoインターフェイスですが、GraphBuilder上でpGraph-> RenderFile()を呼び出す場合にのみ動作します。 pGraph-> AddSourceFilter()メソッドを使用してソースを追加すると、このオプションは機能しません。

私の質問です:これらの情報を一度に取得するかどうかは、適切な方法ですか?いいえの場合は、残りのプロパティーをどのように抽出するのかを教えてください(ちょうど呼び出すために、フレームカウントと期間があります)。

+0

DirectShowを使用する理由はありますか?いつかは廃止されました。 Windowsは、[Windowsプロパティシステム](https://msdn.microsoft.com/en-us/library/windows/desktop/ff728898(v=vs.85).aspx)を使用して、ビデオファイルのすべてのプロパティを提供できます。 –

+0

@JonathanPotter directshowはどこで廃止されましたか? –

答えて

1

フィルターグラフの接続されたメディアタイプからこのような情報を取り出すことができます。サンプルグラバーを使用する場合と使用しない場合、または複数のサンプルグラバーを使用する場合。サンプルグラバーを使用すると、すぐにピン接続メディアタイプにアクセスするためにISampleGrabber::GetConnectedMediaTypeが提供され、これが容易になります。

デマルチプレクサとデコーダ(つまりデコーダ入力)間の接続には、コーデック(サブタイプとBITMAPINFOHEADER :: biCompressionフィールド)、ビットレート、解像度のメディアタイプがあります。

値をGraphStudioNextと簡単に対話的にチェックすることもできます(もちろん、プログラムでアクセス可能です)。

enter image description here

のDirectShow編集サービスはあなたにいくつかの詳細への容易なアクセスを提供していますMedia Detector (MediaDet)を提供しています。柔軟性がなくDirectShowフィルタグラフ上の実際のラッパーと同じように使用することはお勧めできません。これは前述のとおりです。つまり、接続を経由して呼び出し元に公開する値を抽出します。

+0

"デマルチプレクサとデコーダ(すなわちデコーダ入力)間の接続には、コーデック付きのメディアタイプがあります。"どのように接続できますか? 私のグラフ 'pGraph-> AddSourceFilter(pszVideoFile、L" Source "、&pSourceFilter)'にグラフを追加し、グラバーフィルタ 'pGraph-> AddFilter(pGrabberFilter、L" Sample Grabber ")を追加した直後に、 また、 'ISampleGrabber :: GetConnectedMediaType'は私に圧縮されていないフォーマットのプロパティを与えます – mbaros

+0

Ok。私は問題を解決したようだ。私はちょうどソースフィルタの出力ピンを取得します – mbaros

関連する問題