前两天本人在整理自己的歌单时(题外话,本人是一个热衷音乐的程序员噢,哈哈),发现之前下载的很多MP3文件里的歌手,标题等信息对不上,很多都是错的。对于患有“强迫症”的本人来说,当然不会允许这种情况出现啊,哈哈。在查阅了一些资料,并且咬着牙关看了那些“经书”,花了两天终于解决。这里给大家分享一些经验和填补网上资料的一些坑,有兴趣的同僚可以参考参考。这里说一下本人在查阅资料的时候一些感受,我在查阅资料的有几篇文章都不错,但是有几个细节不一样,这样对于不熟悉这块知识的我,我根本不知道谁对谁错,所以最好的方式就是实践操作,毕竟实践是检验真理的唯一标准,嘿嘿。所以,在这里我想对各位同僚和我自己都劝告一下:如果对技术知识而言,我们只想了解,那么去网上看几篇好的文章足以,某些细节并不重要;但是如果学会的话,必须去亲手实践。因为,我们很可能学到知识都是错的(当然毕竟是少数)。好了,话不多,开始正题讲解。

首先,如何知道MP3文件里的歌手,标题信息等对不上呢?

这里提供两种常用方式查看,一种是通过操作系统查看;一种是各种音乐播放器查看。其实还有各种操作音频的工具软件,这里不提供,有兴趣的去网上搜一搜。

Windows操作系统截图:

酷我音乐播放器截图:

我这里说明一下,我最开始以为MP3文件名,就是MP3标题名(歌名)。本人觉得这个是误区。所以,从上面两张图片可以看出,MP3文件名和标题名是两回事,从这里也可以得知,MP3文件的标题,歌手以及其他信息都是写在文件里的。所以要想修改MP3文件的标题,歌手等信息,就得修改MP3文件。

其次,如何修改MP3文件信息?

知道如何查看MP3信息后(后面调试程序,如何得知修改正确与否,用上述方法查看即可),下面就是修改MP3文件信息了。其实就两步,一步解析文件,二步写入文件。

解析文件:

这里我简单说明一下MP3文件信息,MP3文件主要有两大版本。分别是ID3V1、ID3V2版本。ID3V1版本比较简单一点,都是一些比较老的MP3文件才是ID3V1版本。MP3文件歌手、标题等信息都写在文件最后的128字节中。

详见下图:

所以,知道MP3信息之后,就很容易修改了。以二进制形式读取文件,将文件数据都读取一个字节数组中。然后在对应的未知进行修改,超出部分补0即可。文章后面会给出能运行的完整源码实现(C/C++版本)。

ID3V2版本,就相比ID3V1版本麻烦一些,但也不是很难。网上说改版本又划分为1|2|3|4号字版本,3号子版本最常用。但本人解析的所有的ID3V2版本的MP3文件中,都是3号子版本,也许是本人的样本数量太小,这里不做深究。下面给出一张图进行说明:

标签头组成,见下图:

上面标红的值需要关心,其它字段对于修改MP3信息而言,并不重要。这里需要说明一下长度字段,我看了几篇文章,有两种答案(一种是包括标签头大小,一种是不包括标签头大小)。但是我分别使用这两种方案计算,并不影响结果,所以本人也就没继续深究了,感兴趣的同僚可以研究一下,如果可以顺便告诉一下本人,嘿嘿。

标签帧组成,见下图:

上面标红的值需要关心,其它字段对于修改MP3信息而言,并不重要。这里我说明一下信息类型字段混合帧内容字段。信息类型是有个表的,这里不给出所有,只给出我这个程序用到的。

  1. TIT2 ---- 歌名、标题
  2. TPE1 ---- 歌手、创作者
  3. TALB ---- 专辑、唱片

帧内容字段,这里需要特别说明,各种乱因为网上很多文章都不对帧内容进行说明,导致我在解析帧内容时各种乱码,也因此花了些时间。帧内容第一个字节是内容编码格式,有三种。当值为0时,为GBK;当值为1时,为UNICODE;当值为2时,为UTF-8。这里说明一下,当为UNICODE编码时,如果直接读取内容,最开始会有个问号字符,如果偏移2个字节在进行读取,就不会有问号(这里我也不知道为什么,在网上查没有查到,我解析的所有MP3文件都是得偏移2个字节)。

通过上诉说明,发现其实ID3V2也并不是那么复杂,所以修改MP3文件时,把原来的标签帧去掉,写入新的标签帧信息,然后修改标签头长度,最后保存至新的MP3文件即可。

当然,上诉说的都是正常规范的MP3文件,其实还有很多不规范的MP3文件,比如果有的没有标题、歌手、专辑等信息;有的没有标签信息;有的标签帧的帧内容长度是错的等等(这个是ID3V2版本),在实际的过程中这些问题都可能会遇到。但是别慌,实践调试是最好的“老师”。所以我经过了上百次的调试,才大概完成了这个程序。本人收录的近700个MP3文件全部修改正确。下面是修改后的图:

大家可以看到,唱片集信息已经改成本人的公众号了(哈哈)。下面给出我用C++语言实现的版本源码地址,需要说明一下的是,测试的时候,将MP3文件改成【xxx】xxx.mp3命名格式,不然会出错。当然如果你会了,就很容易修改我的代码,祝早点成功。

链接:https://pan.baidu.com/s/1lKEe-C6YcjwIvFQtLS7GZA

提取码:l6an

kjb文件 解析_批量修改MP3文件信息相关推荐

  1. 批量修改mp3文件的title等

    批量修改mp3文件的title等 不是改文件名哦: 下载地址:https://mp3tag.en.softonic.com/ 帮助文档:file:///C:/Program%20Files%20(x8 ...

  2. 文件解析_招标准备与文件解析

    ↑ 点击上方"智天策"关注我们 自7月18日起,每周六晚19:00-21:30,天策未来倾情打造的<军工领域投标培训课>如约开讲.前期已学习了第一讲<招投标基础和 ...

  3. bandizip修改压缩文件内容_如何修改压缩文件的编码?

    使用系统自带的那个"发送到-压缩文件夹"?那么就是压缩为zip格式了.而这种格式,确实要考虑文件名编码的问题--你在日语系统下压缩,使用了本地编码Shift-JIS,显示正常的文件 ...

  4. Python 使用mutagen批量修改MP3标签信息

    以下代码仅供业余爱好参考,不涉及音频专业知识. 说明: 听歌时,想着修改一下mp3的标签信息,但是歌曲很多不可能一个个的修改. 下载了一个Mp3tag软件,添加封面还是可以,但是批量修改标题只能清空等 ...

  5. python 批量修改文件后缀_批量修改文件后缀(Python)

    近期下载了很多各种教程, 但是不幸的是后缀名都是 ".mp4", 而本人喜欢 ".rmvb" 后缀,由于有轻微洁癖, 受不了后面的 ".mp4&quo ...

  6. 批量修改MP3、Flac等格式音频文件的属性

    批量修改mp3.flac的属性.在播放器播放MP3时候,文件的title.artist等信息需要正确设置才能产生last.fm的播放记录.本工具可以按照简单的规律,批量设置文件的属性. 第二版

  7. 批量修改指定文件夹里面相同类型文件的扩展名(转自Github,原作者Crag Richards)

    batch_rename_file.py 批量修改指定文件夹里面相同类型文件的扩展名(转自Github,原作者Crag Richards) ''' 主要思路: 1.创建一个batch_rename函数 ...

  8. 批量修改php用什么,php批量修改指定文件后缀的方法

    php批量修改指定文件后缀的方法 发布于 2014-09-14 18:52:21 | 150 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...

  9. python docx 批量修改docx文件内容和选择位置添加内容

    #-*- encoding:utf_8 -*- from docx import Document from docx.shared import Inches from log import log ...

最新文章

  1. redis的安全性及客户端工具的使用
  2. 【题意分析】1044 Shopping in Mars (25 分)【滑动窗口】
  3. C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
  4. java configuration_关于JAVA 中的Configuration类
  5. 膨胀的木棍(信息学奥赛一本通-T1246)
  6. 29.奖金(拓扑排序)
  7. Python nose test framework 介绍
  8. 开源直播OBS ( Open Broadcaster Software ) 多机位,多场景切换
  9. 拓端tecdat|R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
  10. 【原创】objdump 的使用
  11. 分享Nexus桌面插件的安装及使用,超级好看、好用的插件。附下载链接。
  12. 直角坐标系(Cartesian或Rectangular coordinate system)
  13. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发流程(六)烧写整个系统或更新部分系统
  14. 如何修改VMware虚拟机的配置文件.vmx
  15. 在c语言中while与do-while,C语言中while /do while语句用法
  16. 【日本語勉強】「モデレート」とはどういう意味になるのでしょうか
  17. the+比较级,the+比较级
  18. ElasticSearch那些事儿(五)
  19. Fortran95/2003高级技巧
  20. 计算机英语的作文,计算机英语作文

热门文章

  1. 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)
  2. bcdedit添加linux引导,利用Bcdedit创建Linux系统引导
  3. python爬取丁香园的疫情数据绘制Echarts地图
  4. POSCMS 支付设置
  5. 互换性测量技术-几何误差
  6. 2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=
  7. idea中更换java版本
  8. Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features(2016)
  9. Idling along, (or what to do in the idle task)
  10. 安卓listview下拉刷新_iPhone上被吹爆的良心App,安卓手机终于能用上了