Python修改MP3文件的方法


Posted in Python onJune 15, 2015

本文实例讲述了Python修改MP3文件的方法。分享给大家供大家参考。具体如下:

用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。

# -*- 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程序设计有所帮助。

Python 相关文章推荐
python备份文件的脚本
Aug 11 Python
Python时区设置方法与pytz查询时区教程
Nov 27 Python
Python探索之SocketServer详解
Oct 28 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
Python利用命名空间解析XML文档
Aug 10 Python
Python基于locals返回作用域字典
Oct 17 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
Python从MP3文件获取id3的方法
Jun 15 #Python
python简单实现基于SSL的IRC bot实例
Jun 15 #Python
Python中datetime常用时间处理方法
Jun 15 #Python
Python实现简单截取中文字符串的方法
Jun 15 #Python
构建Python包的五个简单准则简介
Jun 15 #Python
Python中文字符串截取问题
Jun 15 #Python
python获取mp3文件信息的方法
Jun 15 #Python
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python的Django框架安装全攻略
2015/07/15 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python实现上传下载文件功能
2020/11/19 Python
Python 装饰器使用详解
2017/07/29 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
python 调整图片亮度的示例
2020/12/03 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
土木工程实习生自我鉴定
2013/09/19 职场文书
经管应届生求职信
2013/11/17 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
社区服务活动报告
2015/02/05 职场文书
商场营业员岗位职责
2015/04/14 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
Python+Appium自动化测试的实战
2021/06/30 Python
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
德生2P3收音机开箱评测
2022/04/30 无线电