本文執行個體講述了Python修改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)
希望本文所述對大家的Python程式設計有所協助。