ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-获取媒体文件持续时间的最快方法是什么?

2019-11-19 11:06:54  阅读:266  来源: 互联网

标签:c-4-0 mediainfo c


我正在开发一个程序,该程序扫描放置文件夹中的文件,并将其注册到需要该文件持续时间的另一个系统中.到目前为止,我能找到的最好的解决方案是使用MediaInfo从标头中获取持续时间,但是由于某种原因,返回结果往往要花几秒钟.

假设我有一个1,000个文件路径的列表,我想获取每个路径的持续时间,但是获取持续时间需要15秒.列表上的线性迭代将花费4个多小时,甚至并行运行8个任务也将花费半小时.通过我的测试,这将是最好的情况.

我尝试使用MediaInfo DLL以及调用.exe,而且两者似乎都具有相似的处理时间.

DLL代码:

MediaInfo MI;

public Form1()
{
    InitializeComponent();
    MI = new MediaInfo();
}

private void button1_Click(object sender, EventArgs e)
{
    MI.Open(textBox1.Text);
    MI.Option("Inform", "Video;%Duration%");
    label2.Text = MI.Inform();
    MI.Close();
}

可执行代码:

Process proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "MediaInfo.exe",
        Arguments = $"--Output=Video;%Duration% \"{textBox1.Text}\"",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

StringBuilder line = new StringBuilder();
proc.Start();

while (!proc.StandardOutput.EndOfStream)
{
    line.Append(proc.StandardOutput.ReadLine());
}

label2.Text = line.ToString();

应该注意的是,正在处理的文件在网络驱动器上,但是我已经测试了检索本地文件的持续时间,并且只快了几秒钟.
请注意,该程序必须在Windows Server 2003 R2上运行,这意味着仅.net 4.0.我将处理的大多数文件都是.mov,但我不能将其限制于此.

解决方法:

一些更好的代码(首选DLL调用,初始化需要时间),其中包含用于减少扫描持续时间的选项:

MediaInfo MI;

public Form1()
{
    InitializeComponent();
    MI = new MediaInfo();
    MI.Option("ParseSpeed", "0"); // Advanced information (e.g. GOP size, captions detection) not needed, request to scan as fast as possible
    MI.Option("ReadByHuman", "0"); // Human readable strings are not needed, no noeed to spend time on them
}

private void button1_Click(object sender, EventArgs e)
{
    MI.Open(textBox1.Text);
    label2.Text = MI.Get(Stream_Video, "Duration"); //Note: prefer Stream_General if you want the duration of the program (here, you select the duration of the video stream)
    MI.Close();
}

可以根据您的特定需求(例如,您不关心很多功能)来缩短解析时间,但这是直接添加到MediaInfo的代码(例如,对于MP4 / QuickTime文件,仅获取持续时间可能少于如果我禁用其他功能,则为200毫秒),如果需要提高速度,请添加feature request.

Jérôme,MediaInfo开发人员

标签:c-4-0,mediainfo,c
来源: https://codeday.me/bug/20191119/2035571.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有