修改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】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |