English 中文(简体)
如何使用 TagLib # 从视频文件获取视频头头信息
原标题:How to use TagLib# to gain VideoHeader information from Video Files

我正在创建一个程序, 以获取不同类型文件的信息, 到目前为止我主要使用 MP3 文件, 并且正在制作视频 MPG 等类型 。

到目前为止,我几乎不费力地获得了视频标题、年份、持续时间、流派、视频高度和宽度,现在我试图从塔格利布的视频头目部分查阅略为困难的方面。

这是我从这里找到 音频头头的代码后 找到的代码 但是没有成功:

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();
    }
}

这在错误中结束 :

Error 2 Operator != cannot be applied to operands of type TagLib.Mpeg.VideoHeader and < null >

注释:在最后一栏中增加空格,因为它没有出现在该文章中,否则

最佳回答

视频文件有多个解码器、 音频和视频文件。 您的解码器发生的情况是, 在循环的重复中, 解码器不是 Video Header 的意思是 G 没有被正确设置 。 我不知道这是否触发了一个例外, 或者 G 是否被设置为空 Video Header 。

以下守则应发挥作用:

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();
  }
}

另外,您应该使用 < code> TagLib.File.Create 。这是一种静态工厂方法。

<强 > 更新

除了上述初始问题外,即 codec 被定为错误类型,还有这样一个问题,即该文件不是MPEG,实际上没有包含 TagLib.Mpeg.Videoheader ,而是有 TagLib.Riff.BitmapInfofoheader 。除了 TagLib.IVideoCodec 保证的基本属性外,单个文件格式提供的细节因个案不同而有很大差异。重要的是,要知道哪些文件类型属于范围,需要检测哪些特征,并提取可用的视频细节。

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签