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程序设计有所帮助。