【问题标题】:How to use TagLib# to gain VideoHeader information from Video Files如何使用 TagLib# 从视频文件中获取 VideoHeader 信息
【发布时间】:2012-05-27 13:28:34
【问题描述】:

我正在创建一个程序来访问不同类型文件的信息,到目前为止,我主要在 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”和“”类型的操作数

注意:在最后的 null 中添加了空格,因为它没有出现在帖子中

【问题讨论】:

    标签: c# header mpeg frame-rate taglib-sharp


    【解决方案1】:

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

    【讨论】:

    • 下次在电脑上我会调查这个
    • 错误 1 ​​运算符 '!=' 不能应用于类型为 'TagLib.Mpeg.VideoHeader' 和 '' 的操作数
    • 嗯...VideoHeader 是一个结构,所以我们必须使用 is。我会更新答案。
    • 好的,所以我已将代码测试减少到行运行。代码执行得非常好,但我尝试的任何视频文件都没有响应,它执行 if 两次,但从未进入代码设置数据
    • 很遗憾,我无法访问 Visual Studio。您可以在函数中注入调试断点以查看 codec 是否确实是 VideoHeader,如果是,值是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多