如何使用 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 中添加了空格,否则它没有显示在帖子中

如何使用 TagLib# 从视频文件中获取 VideoHeader 信息

视频文件有多个编解码器,一个音频和一个视频编解码器。 您的代码发生的情况是,在循环的一次迭代中,编解码器不是 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保证的基本属性外,个别文件格式提供的细节因具体情况而异。 了解范围内的文件类型、要检测的功能以及提取可用的视频详细信息非常重要。