修改mp3的id3 tag内容
发布时间:2020-05-24 23:11:46 所属栏目:Python 来源:互联网
导读:修改mp3的id3 tag内容
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 #! /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"
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
