1

我想在 C# 中获取视频文件的持续时间。我可以获取视频文件的持续时间,但代码仅适用于本地计算机。如果我在服务器上部署我的代码并上传视频文件,那么此代码会出错。我正在使用以下代码来获取视频时间。

使用 QuartzTypeLib;

 string file1 = "c://ds.mpeg"
        IMediaPosition m_objMediaPosition = null;
        FilgraphManager m_objFilterGraph = new FilgraphManager();
        m_objFilterGraph.RenderFile(filename);
        m_objMediaPosition = m_objFilterGraph as IMediaPosition;

        int s = (int)m_objMediaPosition.Duration;
        int h = s / 3600;
        int m = (s - (h * 3600)) / 60;
        s = s - (h * 3600 + m * 60);

        string time = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);
        lblmsg.Text = time.ToString();
        m_objMediaPosition = null;
        m_objFilterGraph = null;

你有任何代码可以返回上传的视频文件的持续时间。

4

4 回答 4

3

ffmpeg 的快速而肮脏的方式:运行 ffmpeg -i "c:\ds.mpeg" 并解析输出。

于 2009-12-08T09:52:39.640 回答
2

尝试使用 DirectShowLib

于 2009-12-07T20:59:19.757 回答
0

听起来您正在使用的控件正在尝试以某种方式引用图形硬件来执行此功能。即使用 UI 能够枚举此信息。

或许你可以看看WPF中的MediaElement 控件?

于 2009-08-27T21:47:53.687 回答
0

我尝试以不同的方式获取视频长度:
实际上也使用 Windows Media Player 组件,我们可以获得视频的持续时间。
以下代码片段可能会对你们有所帮助:

using WMPLib;
// ...your code here...

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

并且不要忘记添加wmp.dll将出现在System32文件夹中的引用。

于 2016-09-02T01:15:18.220 回答