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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
python复制与引用用法分析
Apr 08 Python
python实现ID3决策树算法
Dec 20 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python实现某论坛自动签到功能
Aug 20 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
如何利用python实现列表嵌套字典取值
Jun 10 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
初探PHP5
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
浅谈php和.net的区别
2014/09/28 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
p5.js临摹旋转爱心
2019/10/23 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
python numpy格式化打印的实例
2018/05/14 Python
解决DataFrame排序sort的问题
2018/06/07 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
在python中做正态性检验示例
2019/12/09 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
试述DBMS的主要功能
2016/11/13 面试题
什么是makefile? 如何编写makefile?
2012/08/08 面试题
计算机大学生的自我评价
2013/10/15 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
刊首寄语大全
2014/04/11 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
基层党支部承诺书
2015/04/30 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
企业法人任命书
2015/09/21 职场文书
情况说明书格式及范文
2019/06/24 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android