我希望在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;
是否有任何代码可以返回上传视频文件的持续时间。
答案 0 :(得分:3)
使用ffmpeg快速而脏的方法:运行ffmpeg -i“c:\ ds.mpeg”并解析输出。
答案 1 :(得分:2)
尝试使用DirectShowLib
答案 2 :(得分:0)
听起来您正在使用的控件试图以某种方式引用图形硬件来执行此功能。即使用UI能够枚举此信息。
也许您可以查看WPF中的MediaElement control?
答案 3 :(得分: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
文件夹中。