当前位置: 首页 > 知识库问答 >
问题:

检测文件是否为MP3文件?

董弘新
2023-03-14

我正在编写一个C库,用于在不同格式/编解码器之间对音频进行解码和编码。在加载所需的编解码器库之前,我有一个快速检测格式的例程。

对于WAV文件,可以在文件开头简单查找ASCII值“RIFF”和“WAVE”。这同样适用于FLAC,我们可以简单地读取前4个字节,即“FLAC”。

但是如何快速检测文件是否是MP3?我不能依赖文件扩展名。我也无法尝试解码第一个MP3帧,因为文件开头可能有其他数据(例如:ID3、封面图像等)。

共有1个答案

西门逸仙
2023-03-14

检测文件是否是MP3比在文件中搜索固定模式要复杂得多。

一些概念

(见http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header(详情请参阅)

  • MP3文件由一系列帧组成,每个帧的开头都有一个标题

确定文件是否为MP3的算法

  • 在文件中搜索同步字(0xFFF或0xFFE)
  • 解析头参数
  • 使用标头参数确定帧长度
  • 使用帧长度搜索到下一帧
  • 如果在查找后发现另一个同步字,则该文件主要是MP3文件
  • 可以肯定的是,重复该过程以查找N个连续的MP3帧。可以增加N以获得更好的命中率
 类似资料:
  • 如何使用apache tika来检测文件是否是MP3?我不只是寻找基于文件扩展名的检测。 这个问题不是重复的。这里有人使用Tika与文件扩展名检测。这对我来说还不够。我需要知道是否文件是mp3或不是基于文件类型,而不是文件名。我在文档中找不到如何做到这一点的任何信息。 TypeDetector总是为所有文件类型返回Application/Octet流,所以我想知道如何使用它来获取信息,如果文件是m

  • 问题内容: 我正在使用某些文件,并且想知道是否存在一种检查文件是否为图像的方法? 问题答案: 这对我来说很好。希望我能帮上忙

  • 问题内容: 除了检查每个可能的扩展名外,我如何检查文件是mp3文件还是图像文件? 问题答案: 您可以使用来识别图像文件。 要查找有关MP3和其他音频/视频文件的更多信息,建议使用 php- mp4info getID3() 。

  • 问题内容: 我正在使用JAI并使用以下文件创建文件: 我在该行之前检查文件是否存在。但是,如何检查文件是.bmp还是.tiff还是图像文件? 有人知道吗? 问题答案: Image Magick项目具有识别图像的功能,并且有一个用于Image Magick的Java包装器,称为JMagick,我认为您可能需要考虑而不是重新发明轮子: http://www.jmagick.org 我一直在使用Imag

  • 问题内容: 如何判断Python中文件是否是二进制文件(非文本)? 我正在Python中搜索大量文件,并始终在二进制文件中获取匹配项。这使输出看起来异常混乱。 我知道我可以使用,但是我对数据所做的事情超出了grep所允许的范围。 过去,我只会搜索大于的字符,但是类似的字符在现代系统上是不可能做到的。理想情况下,解决方案应该很快。 问题答案: 您还可以使用mimetypes模块: 编译二进制mime

  • 问题内容: 有没有办法确保收到的文件中包含图像? 对扩展程序的测试对我来说并不十分安全,因为您可以上传一个并将其扩展名更改为所需的扩展名。 我也尝试使用,但是可能有一些更适合该特定问题的东西。 问题答案: 获取mimetype的本机方法: 对于PHP <5.3,请使用mime_content_type()对于PHP> = 5.3,请使用finfo_open()或mime_content_type(