1

Windows Server 2008でムービーファイル(mp4またはwmv)のデータレートを調べようとしています。WindowsAPIコードパックとC#のShell32COMオブジェクトを使用してみました。これはWindows7で完全に機能しましたが、WindowsServer2008では情報が返されません。

Windows 7エクスプローラーでは、フォルダー内のアイテムの詳細リストに列を追加して、データレート、ビットレート、期間などのファイルプロパティを表示できます。Windows Server 2008でこれを実行しようとすると、これらの列には何も表示されません。Windows APIコードパックを使用してプログラムを実行し、Windows 7マシン上のファイルのデータレートを調べて、ネットワーク経由でWindows Server 2008マシン上のファイルを分析するように指示すると、データレートプロパティを取得できます。ただし、ローカルで行う場合よりも、ネットワークを介してこれらのプロパティを見つけるのにはるかに長い時間がかかります。

Windows Server 2008でC#を使用してデータレートを確認する方法があるかどうかを教えてください。ありがとう!

4

3 に答える 3

2

ffmpeg のライブラリで試すことができます。いくつかの C# ラッパーが利用可能です。このSO投稿をチェックしてください。

于 2012-10-01T19:03:59.640 に答える
2

MediaInfo

1: C# プロジェクトを作成する

2: プロジェクトにこの (クリックしてください)ファイルを含めます

3: 値を抽出する素敵なラッパー クラスを作成します。

これがあなたのためのものです。

public class MediaQuery
{
    public Dictionary<string, string> QueryFile(string filePath)
    {
        MediaInfo mediaInfo = new MediaInfo();
        string version = mediaInfo.Option("Info_Version");
        if (!File.Exists(filePath))
            throw new Exception("File Not Found");
        try
        {
            mediaInfo.Option("Inform", "XML");
            mediaInfo.Option("Complete", "1");
            mediaInfo.Open(filePath);

            string xml = mediaInfo.Inform();
            IEnumerable<XElement> el = XElement.Parse(xml, LoadOptions.None).Elements();
            XElement general = el.FirstOrDefault(e => e.Attribute("type").Value == "General");
            XElement video = el.FirstOrDefault(e => e.Attribute("type").Value == "Video");
            XElement audio = el.FirstOrDefault(e => e.Attribute("type").Value == "Audio");
            Dictionary<string, string> values = new Dictionary<string, string>();
            values = GetValues(general, "General");
            values = GetValues(video, "Video", values);
            values = GetValues(audio, "Audio", values);
            return values;
        }
        catch (Exception ex)
        {
            throw new Exception("Problem Querying File", ex);
        }
    }

    private Dictionary<string, string> GetValues(XElement xElement, string rootType)
    {
        Dictionary<string, string> values = new Dictionary<string, string>();
        return GetValues(xElement, rootType, values);
    }
    private Dictionary<string, string> GetValues(XElement xElement, string rootType, Dictionary<string, string> values)
    {
        foreach (XElement element in xElement.Elements())
        {
            string key = rootType + "/" + element.Name.ToString();
            if (!values.ContainsKey(key))
                values.Add(key, element.Value.ToString());
            else
            {
                int count = 1;
                key = rootType + "/" + element.Name.ToString() + count.ToString();
                while (values.ContainsKey(key))
                {
                    count++;
                    key = rootType + "/" + element.Name.ToString() + count.ToString();
                }
                values.Add(key, element.Value.ToString());
            }
        }
        return values;
    }
}

そのファイルを同じプロジェクトに貼り付けます。

4: ダウンロード MediaInfo の現在のバージョン:ダウンロード ページ。最適なバージョンを選択してください (DLL のみ)。.dll がアプリケーションの実行ディレクトリにあることを確認してください。

5: 使用法:

MediaQuery query = new MediaQuery();
Dictionary<string, string> results = query.QueryFile(@"C:\text.mov");
string videoBitRate;

if (results.TryGetValue("Video/Bit_rate", out videoBitRate) == false)
{ 
   throw new Exception("Video bit rate not found"); 
}
else
{
   // Do whatever you want with this....
   Console.writeline("Video bitrate:" + videoBitRate);
}
于 2012-10-02T15:38:03.543 に答える
0

それは非常に簡単な答えです.Windowsサーバー2008にはmpeg-4マルチプレクサがないため、サーバーのデフォルト構成ではマシンでmp4情報を取得できません。

-お使いのコンピュータで、動画ファイルの上にマウス カーソルを置いたままにすると、再生時間などの基本的なファイル情報が表示されます...

-サーバーで、mp4メディアファイルで同じことを行うと、この情報を表示できないことがわかる場合があります...(期間とサイズ)

その問題に対する答えは、スタート メニューから Windows Server 2008 r2 の管理ツールの下にあるサーバー マネージャーに移動することです。

そこから、左側の機能を選択する必要があります。その後、機能を追加し、DESKTOP EXPERIENCE を選択してインストールする必要があります。

これは、マシンが mp4 情報を読み取れるようにするために最初に行う必要があることです。その後、mp4 メディア ファイルのタイプを mime する必要があります。コーデックをインストールします。

于 2013-10-01T16:29:24.613 に答える