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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python中文字符串截取问题
Jun 15 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python numpy数组中的复制知识解析
Feb 03 Python
python画图常规设置方式
Mar 05 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
总结Python连接CS2000的详细步骤
Jun 23 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
python创建字典及相关管理操作
Apr 13 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
初品cakephp 入门基础
2012/02/16 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
店长职务说明书
2014/02/04 职场文书
yy司仪主持词
2014/03/22 职场文书
企业年会主持词
2014/03/27 职场文书
大学军训心得体会800字
2016/01/11 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL