kjb文件 解析_批量修改MP3文件信息

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

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

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

Windows操作系统截图:

ecf90d07424758a919017e4b810f10e4.png

酷我音乐播放器截图:

8c1c9b9867d4eb3c1fb70a253a8a2dad.png

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

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

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

解析文件:

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

详见下图:

b101b3d1bec3c92dbe784fc304e1b6cd.png

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

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

97b268534cbffa23fc294510e85cdf63.png

标签头组成,见下图:

f3c5201f30a8870534c8499246081d8f.png

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

标签帧组成,见下图:

e2a704cd8f881656e51ccffba3962daa.png

上面标红的值需要关心,其它字段对于修改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文件全部修改正确。下面是修改后的图:

ee1a33ff8481a13806e2234117e634c7.png

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

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

提取码:l6an

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过bat文件执行kjb文件,可以按照以下步骤进行操作: 1. 打开一个文本编辑器,创建一个新的文本文件。 2. 在文本文件中输入以下内容: ``` cd /d D:\data-integration kitchen /file D:\etltest\jobOK.kjb ``` 这里的`D:\data-integration`是kitchen.bat所在的目录,`D:\etltest\jobOK.kjb`是要执行的kjb文件的路径。你可以根据实际情况进行修改。 3. 将文本文件保存为一个批处理文件,例如`runKjb.bat`。 4. 双击运行`runKjb.bat`文件,即可执行kjb文件。 这样,通过运行`runKjb.bat`文件,就可以执行kjb文件了。 #### 引用[.reference_title] - *1* [kettle使用命令行来运行ktr和kjb文件](https://blog.csdn.net/weixin_44266650/article/details/99412613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [kettle 在Linux下执行kjb](https://blog.csdn.net/ytrdgfdtr/article/details/122218756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [kjb文件 解析_批量修改MP3文件信息](https://blog.csdn.net/weixin_39595931/article/details/110255174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值