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 相关文章推荐
wxPython 入门教程
Oct 07 Python
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python绘制直线的方法
Jun 30 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
python读取和保存图片5种方法对比
Sep 12 Python
python os.path模块常用方法实例详解
Sep 16 Python
如何在sublime编辑器中安装python
May 20 Python
python字符串常规操作大全
May 02 Python
python playwright之元素定位示例详解
Jul 23 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
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
Javascript的闭包详解
2014/12/26 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
python实现ping命令小程序
2020/12/28 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
法制宣传实施方案
2014/03/13 职场文书
授权委托书(完整版)
2014/09/10 职场文书
委托公证书格式
2015/01/26 职场文书
匿名检举信范文
2015/03/02 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Pandas数据结构之Series的使用
2022/03/31 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis