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学习之asyncore模块用法实例教程
Sep 29 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
详解python字符串驻留技术
May 21 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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编程开发“虚拟域名”系统
2006/10/09 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
Puppet的一些技巧
2018/09/17 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
python验证身份证信息实例代码
2019/05/06 Python
python tkinter实现屏保程序
2019/07/30 Python
pytorch构建多模型实例
2020/01/15 Python
python中format函数如何使用
2020/06/22 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
电子商务专业自荐信
2014/06/02 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2014年安全生产工作总结
2014/11/13 职场文书