打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python 修改MP3 - 代码分享 - 开源中国社区
Python 修改MP3
Sephiroth 发布于 2010年11月16日 13时 (0评) 1人收藏此代码, 我要收藏(?)
用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。
标签: MP3

代码片段(1)

[代码] [Python]代码

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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python抓取腾视频所有电影,不用钱就可以看会员电影
深入Python(四)
python中的other.a怎么理解?
每周一题——读写配置文件。 Python讨论区/精华帖
Python 3 与Python 2的区别收藏
Python3学习笔记:使用代理访问url地址 - Ken's blog - 开源中国社区
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服