苗翠花与李小环高清:Python 修改MP3 - 代码分享 - 开源中国社区

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 16:39:13
Python 修改MP3Sephiroth 发布于 2010年11月16日 13时 (0评) 1人收藏此代码, 我要收藏(?) 用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。标签: MP3

代码片段(1)

[代码] [Python]代码

view sourceprint? 001 # -*- coding: cp936 -*- 002 """ 003 将MP3文件中的ID3V2.3部分去掉,以便在MP3机上播放 004 用法:mp3lcear [源mp3目录] [生成的mp3目录] 005 """ 006 import sys 007 import os 008 import string 009 import shutil 010 import struct 011 import thread 012 import threading 013 import time 014    015 mp3suffix = 'mp3' 016    017 class Process(threading.Thread): 018 """ 019 简单地在运行的过程中显示进度 020 """ 021 def __init__(self,msg,sleepTime): 022 threading.Thread.__init__(self) 023 self.msg = msg 024 self.running = True 025 self.sleepTime = sleepTime 026 def setPause(self,pause): 027 self.pause = pause 028 def setRunning(self,running): 029 self.running = running 030 def run (self): 031 while(self.running): 032 self.pause.wait() 033 print self.msg, 034 time.sleep(self.sleepTime) 035    036 def usage(code, msg=''): 037 """ 038 程序的使用方法 039 """ 040 print >> sys.stderr, __doc__ 041 if msg: 042 print >> sys.stderr, msg 043 sys.exit(code) 044    045 def checkDir(argDir,create=False): 046 """ 047 检查目录是否存在,如果create为Ture,则新建一个目录 048 """ 049 tempDir = None 050 if(not os.path.isdir(argDir)): 051 currentDir = os.path.abspath(os.curdir) 052 tempDir = os.path.join(currentDir,argDir) 053 if(not os.path.isdir(tempDir) and create): 054 os.mkdir(tempDir) 055 else: 056 usage(1,"目录"+argDir+"不存在") 057 else: 058 tempDir = os.path.abspath(argDir) 059 return tempDir 060    061 def clearMp3(srcFile,destFile): 062 """ 063 修改mp3文件,并将其创建到destFile所指定的地址 064 """ 065 global process 066 srcfp = None 067 filesize = os.path.getsize(srcFile) 068 try: 069 srcfp = open(srcFile,'rb') 070 head = srcfp.read(3) 071 if(head=='ID3'): 072 srcfp.seek(3,1) 073 size = srcfp.read(4) 074 if(not len(size)==4): 075 print srcFile+'文件格式错误' 076 else: 077 size0 = struct.unpack('b',size[0])[0] 078 size1 = struct.unpack('b',size[1])[0] 079 size2 = struct.unpack('b',size[2])[0] 080 size3 = struct.unpack('b',size[3])[0] 081 headSize =(((size0&0x7f)<<21) | ((size1&0x7f)<<14) | ((size2&0x7f)<<7) | (size3&0x7f)) 082 filesize = filesize - headSize 083 destfp = None 084 try: 085 dataLen = 0 086 destfp = open(destFile,'wb') 087 srcfp.seek(headSize,1) 088 data=srcfp.read(1024) 089 while (data!= ''): 090 destfp.write(data) 091 data=srcfp.read(1024) 092 except Exception,e: 093 print '创建文件'+destFile+'错误',e 094 try: 095 if (destfp != None): 096 destfp.close 097 except Exception,de: 098 print de 099 else: 100 print srcFile+'不需要修改 拷贝', 101 try: 102 shutil.copyfile(srcFile,destFile) 103 except Exception, ce: 104 print ce 105 except Exception,oe: 106 print '修改中出错',oe 107 try: 108 if (srcfp != None): 109 srcfp.close() 110 except Exception,se: 111 print de 112    113     114    115 if __name__ == "__main__": 116 if(len(sys.argv)<3): 117 usage(1) 118 global process 119    120 sourceDir = checkDir(sys.argv[1]) 121 destDir = checkDir(sys.argv[2],True) 122    123 print 'Mp3源目录',sourceDir 124 print 'Mp3目的目录',destDir 125    126 process = Process('...',1) 127 pause = threading.Event() 128 process.setPause(pause) 129    130 process.start() 131    132 for filename in os.listdir(sourceDir): 133 srcPath = os.path.join(sourceDir, filename) 134 destPath = os.path.join(destDir, filename) 135 if os.path.isfile(srcPath): 136 print '开始处理 '+filename, 137 tempfilename = filename.lower() 138 if(not tempfilename.endswith(mp3suffix)): 139 print filename+'不是一个mp3文件\n' 140 else: 141 pause.set() 142 clearMp3(srcPath,destPath) 143 pause.clear() 144 print '结束 \n' 145 pause.set() 146 process.running = False 147 sys.exit(0)