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 图片验证码代码
Dec 07 Python
Python牛刀小试密码爆破
Feb 03 Python
Python实现LRU算法的2种方法
Jun 24 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python等待10秒执行下一命令的方法
Jul 19 Python
在终端启动Python时报错的解决方案
Nov 20 Python
python 解决函数返回return的问题
Dec 05 Python
如何使用Python进行PDF图片识别OCR
Jan 22 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的ajax简单实例
2014/02/27 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
德国网上花店:Valentins
2018/08/15 全球购物
化工专业推荐信范文
2013/11/28 职场文书
英语自荐信范文
2013/12/11 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
红歌会主持词
2015/07/02 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis