本文實例講述了Python修改MP3文件的方法。分享給大家供大家參考。具體如下:
用這個程序修改後的MP3比原來要小一些了,因為一張圖片被刪除了,起到了給MP3"瘦身"的作用。在一些mp3中,每個都有一張400多K的圖片,10幾個MP3,就相當一個普通MP3文件的大小了。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 # -*- coding: cp936 -*- """ 將MP3文件中的ID3V2.3部分去掉,以便在MP3機上播放 用法:mp3lcear [源mp3目錄] [生成的mp3目錄] """ import sys import os import string import shutil import struct import thread import threading import time mp3suffix = 'mp3' class Process(threading.Thread): """ 簡單地在運行的過程中顯示進度 """ def __init__(self,msg,sleepTime): threading.Thread.__init__(self) self.msg = msg self.running = True self.sleepTime = sleepTime def setPause(self,pause): self.pause = pause def setRunning(self,running): self.running = running def 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, msg sys.exit(code) def checkDir(argDir,create=False): """ 檢查目錄是否存在,如果create為Ture,則新建一個目錄 """ tempDir = None if(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 tempDir def clearMp3(srcFile,destFile): """ 修改mp3文件,並將其創建到destFile所指定的地址 """ global process 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(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 - 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) except Exception,e: print '創建文件'+destFile+'錯誤',e try: if (destfp != None): destfp.close except Exception,de: print de else: print srcFile+'不需要修改 拷貝', try: shutil.copyfile(srcFile,destFile) except Exception, ce: print ce except Exception,oe: print '修改中出錯',oe try: if (srcfp != None): srcfp.close() except Exception,se: print de if __name__ == "__main__": if(len(sys.argv)<3): usage(1) global process 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() 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 = False sys.exit(0)希望本文所述對大家的Python程序設計有所幫助。