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实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
发布你的Python模块详解
Sep 15 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Python中的 enum 模块源码详析
Jan 09 Python
Python Excel处理库openpyxl使用详解
May 09 Python
Django中多种重定向方法使用详解
Jul 17 Python
python+OpenCV实现图像拼接
Mar 05 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 Python
Python利器openpyxl之操作excel表格
Apr 17 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
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
Node 代理访问的实现
2019/09/19 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
经典c++面试题三
2015/07/08 面试题
网络工程师个人的自我评价范文
2013/10/01 职场文书
奥巴马演讲稿
2014/01/08 职场文书
顶撞领导检讨书
2014/01/29 职场文书
简历的自我评价范文
2014/02/04 职场文书
怀念母亲教学反思
2014/04/28 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
个人查摆剖析材料
2014/10/04 职场文书
优秀员工推荐材料
2014/12/20 职场文书
如何拟写通知正文?
2019/04/02 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Python多个MP4合成视频的实现方法
2021/07/16 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server