1998年,Martin Nilsson & Michael Mutschler牵头,多个贡献者一起发起了ID3v2的工作。 ID3v2的第一个版本是ID3v2.2,2000年发布了ID3v2.4。 ID3v1 附着在音频数据之后,长度为128bytes,每个字段最大支持30个字符。 ? ID3v2 ID3v2是加在音频数据前面的一组数据,每项具体的数据称为frame(例如歌曲名称)。可以包含任意类型的数据,每个frame最大支持16MB,整个tag大小最大支持256MB。 列举一些特性: The ID3v2 tag is a container format, just like IFF or PNG files, allowing new frames (chunks) 2、iTunes应该是优先使用ID3v2的信息 我把脚本放到了 github 上,感兴趣的同学可以通过 https://github.com/cocowool/py-id3 查看。
一.打开和关闭输入文件和输出文件 想要解决上面提到的问题,我们需要对mp3文件的格式有个大致了解,为了方便讲解,我这里画了个示意图: ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了 ID3V1 ID3V1 包含了作者,作曲,专辑等信息,长度为 128BYTE 由于av_parser_parse2()这个方法的输入必须是只包含音频编码数据的“裸流”,所以,我们在读取mp3文件的时候,必须跳过ID3V2 所以,我们就必须知道ID3V2标签的总长度。下面,我画了个ID3V2标签头的示意图,方便讲解。 File ID(3) Version(2) Flags(1) Size(4) ID3V2标签头固定为10byte,其中,Size部分的值是指除ID3V2标签头之外数据的总长度。
MP3File file = new MP3File("D:\\upload\\Kalimba.mp3");//1,lyrics AbstractID3v2 id3v2 = file.getID3v2Tag(); ID3v1 id3v1 = file.getID3v1Tag(); if (id3v2 = null) { System.out.println("id3v2"); // if("".equals(
总结:判断.mp3文件后128字节中,前三个字节是否为TAG可以作为我们的判断依据之一 (2)ID3V2标签 这个标签一般是放在整个.mp3文件的头部(也可能在文件的中部),因为我们V1标签的长度有限, 标签中ID3字节(因为文件头部可能是ID3V2也可能是Frame,并且ID3V2还可能会在文件中部或者压根mp3文件中就没有v2标签) 第四步:用Frame帧头判断 package com.example.musicserver.tools (IOException e) { e.printStackTrace(); } // 第三种判断:判断头部,mp3有一些特定的文件头(ID3v2 byte[3]; // 用于读取文件头的前三个字节 inputStream.read(header); // 检查文件头部是否包含 "ID3" 标识符(ID3v2 标签) if (header[0] == 'I' && header[1] == 'D' && header[2] == '3') { // ID3v2
二、整个MP3 文件结构: MP3 文件大体分为三部分:TAG_V2(ID3V2),音频数据,TAG_V1(ID3V1) a). ID3V2 在文件开始的位置,包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1 的信息量。 b). ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。 Frame . . . 表格2.1 1、ID3V2 ID3V2 到现在一共有4 个版本,但流行的播放软件一般只支持第3 版, 既ID3v2.3。 由于ID3V1 记录在MP3 文件的末尾,ID3V2就只好记录在MP3 文件的首部了(如果有一天发布ID3V3,真不知道该记录在哪里)。也正是由于这个原因,对ID3V2 的操作比ID3V1 要慢。
以及关闭文件的函数 调用avformat_open_input 调用init_input:打开文件,探测视频格式 调用avio_skip:跳过初始化的字节 调用ff_id3v2_read_dict:判断是否有id3v2 格式的字段 调用s->iformat->read_header:从buffer里面读取视频头,确定解码器 调用ff_id3v2_parse_chapters:解析id3v2中的章节、描述等信息 调用avformat_find_stream_info AVFMT_NOFILE formats will not have a AVIOContext */ if (s->pb){ // 读取文件中的id3v2字段的值 read_header && (ret = s->iformat->read_header(s)) < 0) goto fail; } ... // 解析文件id3v2
元数据格式Metadatics支持读写各种音频文件类型的ID3v1,ID3v2,MP4,Vorbis,APE和ASF标签。
此外,它还可以重命名文件夹、处理正则表达式、Unicode 功能、并支持各种元标记, 如:ID3v1、ID3v2、EXIF、OLE、AVI、MD5、CRC32 和 SHA1。
此外,它还可以重命名文件夹,支持 Unicode 字符,并能识别多种元数据标签,如:ID3v1、ID3v2、EXIF、OLE、AVI、MD5、CRC32 和 SHA1。
下载地址:https://pan.baidu.com/s/1o7FIsPk PS:上面只读取了IDV1,部分歌曲可能不存在 可以下载@缤纷 提供的程序,增加了ID3V2的支持: https://files.cnblogs.com
此外,它还可以重命名文件夹、处理正则表达式、Unicode 功能、并支持各种元标记,如:ID3v1、ID3v2、EXIF、OLE、AVI、MD5、CRC32 和 SHA1。
MP3文件使用一种称为ID3v2的格式来保存关于音频内容的描述信息,包含的数据有歌曲演唱者、所属唱片和音乐风格等等。 AV Foundation 支持读取ID3v2标签的所有版本,但不支持写入。MP3格式收到专利限制,所以 AVFoundation 无法支持对MP3后者ID3数据进行编码。
MP3文件使用一种称为ID3v2的格式来保存关于音频内容的描述信息,包含的数据有歌曲演唱者、所属唱片和音乐风格等等。 AV Foundation 支持读取ID3v2标签的所有版本,但不支持写入。MP3格式收到专利限制,所以 AVFoundation 无法支持对MP3后者ID3数据进行编码。
functions using strings ( filename, error messages, ID3 info, … ) – read info tags from file ( ID3v1, ID3v2
目前,它支持 MP3文件的ID3v1和ID3v2,FLAC,MPC,Speex,WavPack,TrueAudio,WAV,AIFF,MP4和ASF文件中的Ogg Vorbis注释和ID3标签和Vorbis
对于CBR编码,换算成文件位置偏移也很简单,使用的是以下公式: 文件位置(byte) = 目标时间位置(s)* 比特率(kbps)* 1000 / 8 + id3v2字段大小(如果存在)
>: parser node is id3v2. [2023-12-20 19:02:26] DEBUG : awplayer <CdxParserCreate:717>: Good, it's 'id3v2
音频视频文件元数据 MP3文件(.mp3) 使用ID3标签存储元数据 ID3v1:固定长度的标签,位于文件末尾 ID3v2:可变长度的标签,支持Unicode和扩展功能 包含艺术家、专辑、标题、年份等信息