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 相关文章推荐
详解python3实现的web端json通信协议
Dec 29 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Python PIL库图片灰化处理
Apr 07 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 Python
keras多显卡训练方式
Jun 10 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
python批量提取图片信息并保存的实现
Feb 05 Python
Python包管理工具pip的15 个使用小技巧
May 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
与数据库连接
2006/10/09 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
video.js添加自定义组件的方法
2020/12/09 Javascript
JS实现简易日历效果
2021/01/25 Javascript
Python开发编码规范
2006/09/08 Python
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
django页面跳转问题及注意事项
2019/07/18 Python
pycharm快捷键汇总
2020/02/14 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
自荐书封面下载
2013/11/29 职场文书
遗嘱继承公证书
2014/04/09 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
销售合作意向书范本
2015/05/08 职场文书
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL