我正在尝试从文件中读取元数据.我只需要Video - > Length属性,但是我无法找到一种简单的方法来读取这些信息.
我认为这很容易,因为默认情况下它在资源管理器中可见,但这看起来比我预期的要复杂得多.我最接近的是使用:
Microsoft.DirectX.AudioVideoPlayback.Video video = new Microsoft.DirectX.AudioVideoPlayback.Video(str);
double duration = video.Duration;
Run Code Online (Sandbox Code Playgroud)
但是这会抛出一个LoaderLock异常,我不知道如何处理它.
有任何想法吗?
chs*_*hsh 10
其中许多细节都是由shell提供的,因此您可以通过添加对COM库"Microsoft Shell控件和自动化"(Shell32)的引用,然后使用Folder.GetDetailsOf方法来查询扩展的详细信息来完成此操作.
我最近在寻找这个,并在MSDN C#General论坛上遇到了这个问题.我最后写了这个作为FileInfo的扩展方法:
public static Dictionary<string, string> GetDetails(this FileInfo fi)
{
Dictionary<string, string> ret = new Dictionary<string, string>();
Shell shl = new ShellClass();
Folder folder = shl.NameSpace(fi.DirectoryName);
FolderItem item = folder.ParseName(fi.Name);
for (int i = 0; i < 150; i++)
{
string dtlDesc = folder.GetDetailsOf(null, i);
string dtlVal = folder.GetDetailsOf(item, i);
if (dtlVal == null || dtlVal == "")
continue;
ret.Add(dtlDesc, dtlVal);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果你正在寻找特定的条目,你可以做类似的事情,虽然找到这些条目所在的索引要快得多(长度是索引27我相信)并且只是查询它们.请注意,我没有对索引是否可以改变进行大量研究(我对此表示怀疑),这就是我采用字典方法的原因.
看看这个SO问题 - 用于C#/ .NET的Solid FFmpeg包装器,它链接到几个ffmpeg .Net实现.ffmpeg适用于大多数视频格式/编解码器.这样您就不必担心计算机上安装的编解码器了.
或者查看http://mediainfo.sourceforge.net/en.
归档时间: |
|
查看次数: |
29957 次 |
最近记录: |