加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

修改mp3的id3 tag内容

发布时间:2020-12-17 17:30:49 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #! /usr/bin/env python# encoding: utf8import sysimport osimport binasciiimport jsondef getId3Info(fp): id3Tags = [] frameIds = ['AENC','APIC

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#! /usr/bin/env python
# encoding: utf8
import sys
import os
import binascii
import json

def getId3Info(fp):
    id3Tags = []
    frameIds = ['AENC','APIC','COMM','COMR','ENCR','ETC0','GEOB','GRID','IPLS','MCDI','MLLT','OWNE','PRIV','PCNT','POPM','POSS','RBUF','RVAD','RVRB','SYLT','SYTC','TALB','TBPM','TCOM','TCON','TCOP','TDAT','TDLY','TENC','TEXT','TFLT','TIME','TIT1','TIT2','TIT3','TKEY','TLAN','TLEN','TMED','TOAL','TOFN','TOLY','TOPE','TORY','TOWM','TPE1','TPE2','TPE3','TPE4','TPOS','TPUB','TRCK','TRDA','TRSN','TRSO','TSIZ','TSRC','TSSE','TYER','TXXX','UFID','USER','USLT','WCOM','WCOP','WOAF','WOAR','WOAS','WORS','WPAY','WPUB','WXXX']
    fp.read(10)
    while True:
        id3Info = {}
        tag = fp.read(4)
        if tag not in frameIds:
            break
        sizePos = fp.tell()
        binSize = fp.read(4)
        size = int(binascii.b2a_hex(binSize),16)
        fp.read(2)
        conPos = fp.tell()
        cont = fp.read(size)
        id3Info['sizePos'] = sizePos
        id3Info['size'] = size
        id3Info['tag'] = tag
        id3Info['conPos'] = conPos
        id3Info['con'] = cont
        id3Tags.append(id3Info)
    return id3Tags

def getCon(id3Info,tag):
    for info in id3Info:
        if tag == info['tag']:
            return info['con']

def getConPos(id3Info,tag):
    for info in id3Info:
        if tag == info['tag']:
            return info['conPos']

def getConSize(id3Info,tag):
    for info in id3Info:
        if tag == info['tag']:
            return info['size']

def getConSizePos(id3Info,tag):
    for info in id3Info:
        if tag == info['tag']:
            return info['sizePos']

def writeInfo(path,tag,newCon):
    fp = open(path,'rb')
    id3Info = getId3Info(fp)
    fp.seek(0)
    oldCon = getCon(id3Info,tag)
    size = getConSize(id3Info,tag)
    sizePos = getConSizePos(id3Info,tag)
    tmpSize = str(len(newCon) + 1)
    while(len(tmpSize) < 8):
        tmpSize = '0' + tmpSize
    newSize = binascii.a2b_hex(tmpSize)
    split = binascii.a2b_hex('0000')
    newCon = binascii.a2b_hex('00') + newCon

    pre = fp.read(sizePos)
    fp.seek(getConPos(id3Info,tag) + size)
    last = fp.read()

    newFile = pre + newSize + split + newCon + last

    p,n = os.path.split(path)
    b,l = os.path.splitext(n)
    newPath = os.path.join(p,b + "_" + newCon.strip('x00') + l)
    newFp = open(newPath,'wb')
    newFp.write(newFile)

    newFp.close()
    fp.close()
    return newPath

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print "用法: getGenre.py 新的genre mp3文件"
        exit()
    newCon = sys.argv[1]
    abspath = os.path.abspath(sys.argv[2])
    ret = writeInfo(abspath,"TCON",newCon)
    print ret + " OK"

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读