24

大丈夫。実際には、主にmp4形式が必要です。しかし、他のタイプも入手できれば、それは素晴らしいことです。ファイルの期間を読み取るだけです。C# 4.0 でそれを行うにはどうすればよいですか?

だから私が必要なのは、このビデオのようなものです:13 minutes 12 seconds

3つのサードパーティのexeも使用できます。ファイルに関する情報をテキスト ファイルに保存するように。そのテキスト ファイルを解析できます。

ありがとうございました。

4

10 に答える 10

14

Windows Media Player を使用することもできますが、要求したすべてのファイル タイプはサポートされていません。

using WMPLib;

public Double Duration(String file)
    {
        WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
        IWMPMedia mediainfo = wmp.newMedia(file);
        return mediainfo.duration;
    }
}
于 2012-04-17T12:19:39.943 に答える
12

MediaDetDirectShow.NET ラッパー ライブラリを介して、DirectShow API オブジェクトを使用できます。コードサンプルのビデオの長さの取得を参照してくださいget_StreamLength。秒単位で長さを取得します。これは、WindowsにMPEG-4デマルチプレクサがインストールされていることを前提としています(7より前のWindowsではサードパーティのコンポーネントが必要です。同じことがcezor による別の回答にも当てはまると思いますが、コンポーネントを自由に再配布できます)。

于 2012-04-17T12:27:22.360 に答える
5

私見では、メディア ファイルに関する多くの情報を提供するMediaInfoを使用できます。
そのための CLI があるので、コードから使用して必要な情報を取得できます。このリンク
をご覧ください。

于 2012-04-17T12:09:02.147 に答える
4

あなたはFFMPEGを探していると思います - https://ffmpeg.org/

この質問でそれらについて読むことができるいくつかの無料の代替手段もあります-Using FFmpeg in .net?

   FFMpeg.NET
   FFMpeg-Sharp
   FFLib.NET

FFMPEG を使用して期間を見つける例については、このリンクを参照してください - http://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for-ffmpeg/

        public VideoFile GetVideoInfo(string inputPath)
        {
            VideoFile vf = null;
            try
            {
                vf = new VideoFile(inputPath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            GetVideoInfo(vf);
            return vf;
        }
        public void GetVideoInfo(VideoFile input)
        {
            //set up the parameters for video info
            string Params = string.Format("-i {0}", input.Path);
            string output = RunProcess(Params);
            input.RawInfo = output;

            //get duration
            Regex re = new Regex("[D|d]uration:.((\\d|:|\\.)*)");
            Match m = re.Match(input.RawInfo);

            if (m.Success)
            {
                string duration = m.Groups[1].Value;
                string[] timepieces = duration.Split(new char[] { ':', '.' });
                if (timepieces.Length == 4)
                {
                    input.Duration = new TimeSpan(0, Convert.ToInt16(timepieces[0]), Convert.ToInt16(timepieces[1]), Convert.ToInt16(timepieces[2]), Convert.ToInt16(timepieces[3]));
                }
            }
       }
于 2012-04-17T12:09:25.097 に答える
3

Windows Media Player コンポーネントも使用して、ビデオの長さを取得できます。
次のコード スニペットが役立つ場合があります。

using WMPLib;
// ...
var player = new WindowsMediaPlayer();
var clip = player.newMedia(filePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));

フォルダーwmp.dllに存在する参照を追加することを忘れないでください。System32

于 2016-09-02T01:11:00.693 に答える
3

FFMPEG プロジェクトには ffprobe と呼ばれるツールがあり、マルチメディア ファイルについて必要な情報を提供し、適切にフォーマットされた JSON で情報を出力できます。

例として、この回答を見てください。

于 2013-05-29T06:58:39.507 に答える