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中for语句简单遍历数据的方法
May 07 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 Python
python中复数的共轭复数知识点总结
Dec 06 Python
7个关于Python的经典基础案例
Nov 07 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
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
一个网马的tips实现分析
2010/11/28 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
使用Pycharm分段执行代码
2020/04/15 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
幼儿园教研活动方案
2014/01/19 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
协议书范文
2015/01/27 职场文书
委托书格式范文
2015/01/28 职场文书
经理岗位职责
2015/02/02 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
恰同学少年观后感
2015/06/08 职场文书
公司酒会致辞
2015/07/30 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
教你利用python实现企业微信发送消息
2021/05/23 Python