Python修改MP3文件的方法
本文实例讲述了Python修改MP3文件的方法。分享给大家供大家参考。具体如下:
用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。
#-*-coding:cp936-*-
"""
将MP3文件中的ID3V2.3部分去掉,以便在MP3机上播放
用法:mp3lcear[源mp3目录][生成的mp3目录]
"""
importsys
importos
importstring
importshutil
importstruct
importthread
importthreading
importtime
mp3suffix='mp3'
classProcess(threading.Thread):
"""
简单地在运行的过程中显示进度
"""
def__init__(self,msg,sleepTime):
threading.Thread.__init__(self)
self.msg=msg
self.running=True
self.sleepTime=sleepTime
defsetPause(self,pause):
self.pause=pause
defsetRunning(self,running):
self.running=running
defrun(self):
while(self.running):
self.pause.wait()
printself.msg,
time.sleep(self.sleepTime)
defusage(code,msg=''):
"""
程序的使用方法
"""
print>>sys.stderr,__doc__
ifmsg:
print>>sys.stderr,msg
sys.exit(code)
defcheckDir(argDir,create=False):
"""
检查目录是否存在,如果create为Ture,则新建一个目录
"""
tempDir=None
if(notos.path.isdir(argDir)):
currentDir=os.path.abspath(os.curdir)
tempDir=os.path.join(currentDir,argDir)
if(notos.path.isdir(tempDir)andcreate):
os.mkdir(tempDir)
else:
usage(1,"目录"+argDir+"不存在")
else:
tempDir=os.path.abspath(argDir)
returntempDir
defclearMp3(srcFile,destFile):
"""
修改mp3文件,并将其创建到destFile所指定的地址
"""
globalprocess
srcfp=None
filesize=os.path.getsize(srcFile)
try:
srcfp=open(srcFile,'rb')
head=srcfp.read(3)
if(head=='ID3'):
srcfp.seek(3,1)
size=srcfp.read(4)
if(notlen(size)==4):
printsrcFile+'文件格式错误'
else:
size0=struct.unpack('b',size[0])[0]
size1=struct.unpack('b',size[1])[0]
size2=struct.unpack('b',size[2])[0]
size3=struct.unpack('b',size[3])[0]
headSize=(((size0&0x7f)<<21)|((size1&0x7f)<<14)|((size2&0x7f)<<7)|(size3&0x7f))
filesize=filesize-headSize
destfp=None
try:
dataLen=0
destfp=open(destFile,'wb')
srcfp.seek(headSize,1)
data=srcfp.read(1024)
while(data!=''):
destfp.write(data)
data=srcfp.read(1024)
exceptException,e:
print'创建文件'+destFile+'错误',e
try:
if(destfp!=None):
destfp.close
exceptException,de:
printde
else:
printsrcFile+'不需要修改拷贝',
try:
shutil.copyfile(srcFile,destFile)
exceptException,ce:
printce
exceptException,oe:
print'修改中出错',oe
try:
if(srcfp!=None):
srcfp.close()
exceptException,se:
printde
if__name__=="__main__":
if(len(sys.argv)<3):
usage(1)
globalprocess
sourceDir=checkDir(sys.argv[1])
destDir=checkDir(sys.argv[2],True)
print'Mp3源目录',sourceDir
print'Mp3目的目录',destDir
process=Process('...',1)
pause=threading.Event()
process.setPause(pause)
process.start()
forfilenameinos.listdir(sourceDir):
srcPath=os.path.join(sourceDir,filename)
destPath=os.path.join(destDir,filename)
ifos.path.isfile(srcPath):
print'开始处理'+filename,
tempfilename=filename.lower()
if(nottempfilename.endswith(mp3suffix)):
printfilename+'不是一个mp3文件\n'
else:
pause.set()
clearMp3(srcPath,destPath)
pause.clear()
print'结束\n'
pause.set()
process.running=False
sys.exit(0)
希望本文所述对大家的Python程序设计有所帮助。