0

mp4 ファイルの長さを、できれば秒単位で取得する必要があります。DirectShow を使用していましたが (以下のコードを参照)、特に役に立たないエラーが発生し続けます。誰かがこれに対する簡単な解決策を持っているかどうか疑問に思っています。(真剣に、その情報を入手するのがとても難しいことを誰が知っていましたか)

public static void getDuration(string moviePath)
    {
        FilgraphManager m_objFilterGraph = null;
        m_objFilterGraph = new FilgraphManager();
        m_objFilterGraph.RenderFile(moviePath);

        IMediaPosition m_objMediaPosition = null;
        m_objMediaPosition = m_objFilterGraph as IMediaPosition;

        Console.WriteLine(m_objMediaPosition.Duration);
    }

このコードを実行すると、「HRESULT からの例外: 0x80040265」というエラーが表示されます。

私もこれを使ってみました:ビデオの長さを取得 していますが、MP4ファイルでは機能するとは思わないため、どちらも機能しません。

真剣に、これを行うにはもっと簡単な方法が必要だと感じています。

注: exe のような ffmpeg を使用してから、出力を解析して情報を取得することは避けたいと思います。

4

3 に答える 3

2

あなたは問題に正しく取り組んでいます。.MP4ソースファイルから始まり、ビデオおよびオーディオ レンダラーまで、優れたパイプラインを構築する必要があります。それからIMediaPosition.Durationあなたが望むものを手に入れます。現在VFW_E_UNSUPPORTED_STREAM、パイプラインを構築できないため、取得しています。

クリーンな Windows の DirectShow では、MPEG-4 の適切なサポートがないことに注意してください。不足しているブロックを追加するには、サード パーティのパーサーをインストールする必要があります。これが問題の原因である可能性があります。このギャップを埋めるために利用できる優れた無料の DirectShow Mpeg-4 フィルターがあります。

ビデオの長さを取得するリンクの下のコード サンプルも基本的に有効ですが、問題のメディア ファイルに追加の仮定を追加する非推奨のコンポーネントを使用しています。.MP4システムにサポートがIMediaPosition.Durationあれば、あなたが探しているものを提供することです。

于 2012-07-05T14:17:13.937 に答える
0

IMediaPositionインターフェイスからget_Duration()を使用できます。

これは、秒単位のビデオ継続時間でdouble値を返します。

    Double Lenght;

    m_FilterGraph = new FilterGraph()

//Configure the FilterGraph()

    m_mediaPosition = m_FilterGraph as IMediaPosition;
    m_mediaPosition.get_Duration(out Length);
于 2013-01-24T12:24:57.773 に答える