如何使用 TagLib# 从视频文件中获取 VideoHeader 信息
本文关键字:获取 VideoHeader 信息 文件 视频 何使用 TagLib# | 更新日期: 2023-09-27 18:35:38
我正在创建一个程序来访问不同类型文件的信息,到目前为止,我主要在MP3文件上取得了成功,现在正在研究视频MPG等类型。
到目前为止,我已经能够毫不费力地获得视频标题、年份、持续时间、流派、视频高度和宽度,现在我正在尝试从 TagLib 的 VideoHeader 部分访问稍微困难的方面。
这是我设法从这里找到有关 AudioHeaders 的内容中获得的代码,但它不起作用:
TagLib.File f = TagLib.Mpeg.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
MPGbps.Text = G.VideoFrameRate.ToString();
}
我哪里出错了?
我的新当前代码:
TagLib.File f = TagLib.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
if (G != null)
{
MPGbps.Text = G.VideoFrameRate.ToString();
}
}
这以错误结束:
错误 2 运算符"!="不能应用于类型为"TagLib.Mpeg.VideoHeader"和"<空>"的操作数空>
注意:在 Final NULL 中添加了空格,否则它没有显示在帖子中
视频文件有多个编解码器,一个音频和一个视频编解码器。 您的代码发生的情况是,在循环的一次迭代中,编解码器不是 VideoHeader,这意味着 G 设置不正确。我不确定这是否触发了异常,或者 G 是否设置为空的 VideoHeader。
下面的代码应该可以工作:
TagLib.File f = TagLib.File.Create(GetMPG.FileName);
foreach(ICodec codec in f.Properties.Codecs){
if(codec is TagLib.Mpeg.VideoHeader) {
TagLib.Mpeg.VideoHeader G = (TagLib.Mpeg.VideoHeader) codec;
MPGbps.Text = G.VideoFrameRate.ToString();
}
}
此外,您应该改用TagLib.File.Create
。这是一种静态工厂方法。
更新
除了上述codec
被转换为错误类型的初始问题之外,还有一个问题是该文件不是 MPEG,实际上不包含TagLib.Mpeg.VideoHeader
而是具有TagLib.Riff.BitmapInfoHeader
。 除了TagLib.IVideoCodec
保证的基本属性外,个别文件格式提供的细节因具体情况而异。 了解范围内的文件类型、要检测的功能以及提取可用的视频详细信息非常重要。