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中线程编程之threading模块的使用详解
Jun 23 Python
21行Python代码实现拼写检查器
Jan 25 Python
PyTorch学习笔记之回归实战
May 28 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Python socket模块方法实现详解
Nov 05 Python
python新手学习使用库
Jun 11 Python
python中元组的用法整理
Jun 15 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
django注册用邮箱发送验证码的实现
Apr 18 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
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
js事件(Event)知识整理
2012/10/11 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
python正则表达式的使用
2017/06/12 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python对象与json相互转换的方法
2019/05/07 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
给物业的表扬信
2014/01/21 职场文书
研究生毕业鉴定
2014/01/29 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android