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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
详解Python迭代和迭代器
Mar 28 Python
深入理解python多进程编程
Jun 12 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
django中ImageField的使用详解
Dec 21 Python
selenium自动化测试入门实战
Dec 21 Python
Python 解决空列表.append() 输出为None的问题
May 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
php+dbfile开发小型留言本
2006/10/09 PHP
第十节--抽象方法和抽象类
2006/11/16 PHP
php下将XML转换为数组
2010/01/01 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Python使用gensim计算文档相似性
2016/04/10 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python去除字符串中的换行符
2017/10/11 Python
Python实现简单的语音识别系统
2017/12/13 Python
python批量获取html内body内容的实例
2019/01/02 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
争先创优活动总结
2014/08/27 职场文书
python实现高效的遗传算法
2021/04/07 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
Python django中如何使用restful框架
2021/06/23 Python