Python 修改MP3,python修改mp3,用这个程序修改后的MP3


用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。

# -*- coding: cp936 -*-"""将MP3文件中的ID3V2.3部分去掉,以便在MP3机上播放用法:mp3lcear [源mp3目录] [生成的mp3目录]"""import sysimport osimport stringimport shutilimport structimport threadimport threadingimport timemp3suffix = 'mp3'class Process(threading.Thread):"""简单地在运行的过程中显示进度"""def __init__(self,msg,sleepTime):threading.Thread.__init__(self)self.msg = msgself.running = Trueself.sleepTime = sleepTimedef setPause(self,pause):self.pause = pausedef setRunning(self,running):self.running = runningdef run (self):while(self.running):self.pause.wait()print self.msg,time.sleep(self.sleepTime)def usage(code, msg=''):"""程序的使用方法"""print >> sys.stderr, __doc__if msg:print >> sys.stderr, msgsys.exit(code)def checkDir(argDir,create=False):"""检查目录是否存在,如果create为Ture,则新建一个目录"""tempDir = Noneif(not os.path.isdir(argDir)):currentDir = os.path.abspath(os.curdir)tempDir = os.path.join(currentDir,argDir)if(not os.path.isdir(tempDir) and create):os.mkdir(tempDir)else:usage(1,"目录"+argDir+"不存在")else:tempDir = os.path.abspath(argDir)return tempDirdef clearMp3(srcFile,destFile):"""修改mp3文件,并将其创建到destFile所指定的地址"""global processsrcfp = Nonefilesize = 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(not len(size)==4):print srcFile+'文件格式错误'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 - headSizedestfp = Nonetry:dataLen = 0destfp = open(destFile,'wb')srcfp.seek(headSize,1)data=srcfp.read(1024)while (data!= ''):destfp.write(data)data=srcfp.read(1024)except Exception,e:print '创建文件'+destFile+'错误',etry:if (destfp != None):destfp.closeexcept Exception,de:print deelse:print srcFile+'不需要修改 拷贝',try:shutil.copyfile(srcFile,destFile)except Exception, ce:print ceexcept Exception,oe:print '修改中出错',oetry:if (srcfp != None):srcfp.close()except Exception,se:print deif __name__ == "__main__":if(len(sys.argv)<3):usage(1)global processsourceDir = checkDir(sys.argv[1])destDir = checkDir(sys.argv[2],True)print 'Mp3源目录',sourceDirprint 'Mp3目的目录',destDirprocess = Process('...',1)pause = threading.Event()process.setPause(pause)process.start()for filename in os.listdir(sourceDir):srcPath = os.path.join(sourceDir, filename)destPath = os.path.join(destDir, filename)if os.path.isfile(srcPath):print '开始处理 '+filename,tempfilename = filename.lower()if(not tempfilename.endswith(mp3suffix)):print filename+'不是一个mp3文件\\n'else:pause.set()clearMp3(srcPath,destPath)pause.clear()print '结束 \\n'pause.set()process.running = Falsesys.exit(0)#该片段来自于http://byrx.net

评论关闭