Python修改MP3文件的方法
admin
2023-07-31 02:29:04
0

本文实例讲述了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程序设计有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...