本文实例讲述了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程序设计有所帮助。