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爬取网站数据保存使用的方法
Nov 20 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python中列表的切片与修改知识点总结
Jul 23 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
用python绘制樱花树
Oct 09 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
如何在PHP中生成随机数
2020/06/04 PHP
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Django中处理出错页面的方法
2015/07/15 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python如何实现复制目录到指定目录
2020/02/13 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
交通事故检查书范文
2014/01/30 职场文书
《大海那边》教学反思
2014/04/09 职场文书
抵押贷款承诺书
2014/05/30 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
离婚财产处理协议书
2014/09/30 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书