Python修改MP3文件的方法

   本文实例讲述了Python修改MP3文件的方法。分享给大家供大家参考。具体如下:

  用这个程序修改后的MP3比原来要小一些了,因为一张图片被删除了,起到了给MP3"瘦身"的作用。在一些mp3中,每个都有一张400多K的图片,10几个MP3,就相当一个普通MP3文件的大小了。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

# -*- 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程序设计有所帮助。

时间: 2016-06-16

Python修改MP3文件的方法的相关文章

python获取mp3文件信息的方法

  本文实例讲述了python获取mp3文件信息的方法.分享给大家供大家参考.具体如下: 将代码生成.py文件放在目录下运行,可以获取该目录的所有mp3文件的信息,需要使用ID3库 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import os, sys from ID3 import * files = os.listdir(os.getcwd()) for f in files: x = os.path.splitext(f) if x[1] == '.mp3':

Python从MP3文件获取id3的方法

       本文实例讲述了Python从MP3文件获取id3的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 def getID3(filename): fp = open(filename, 'r') fp.seek(-128, 2) fp.read(3) # TAG iniziale title = fp.read(30) artist = fp.read(30) album = fp.read(30) anno = fp.read(4) com

python调用java模块SmartXLS和jpype修改excel文件的方法

  这篇文章主要介绍了python调用java模块SmartXLS和jpype修改excel文件的方法,涉及Python调用java模块的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python调用java模块SmartXLS和jpype修改excel文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # -*- coding: utf8 -*- """ 使用java的模块Sma

python使用PyGame播放Midi和Mp3文件的方法

  python使用PyGame播放Midi和Mp3文件的方法 本文实例讲述了python使用PyGame播放Midi和Mp3文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ''' pg_midi_sound101.py play midi music files (

python使用PyGame播放Midi和Mp3文件的方法_python

本文实例讲述了python使用PyGame播放Midi和Mp3文件的方法.分享给大家供大家参考.具体实现方法如下: ''' pg_midi_sound101.py play midi music files (also mp3 files) using pygame tested with Python273/331 and pygame192 by vegaseat ''' import pygame as pg def play_music(music_file): ''' stream m

Python读写ini文件的方法

  本文实例讲述了Python读写ini文件的方法.分享给大家供大家参考.具体如下: 比如有一个文件update.ini,里面有这些内容: ? 1 2 3 4 5 6 7 8 [ZIP] EngineVersion=0 DATVersion=5127 FileName=dat-5127.zip FilePath=/pub/antivirus/datfiles/4.x/ FileSize=13481555 Checksum=6037,021E MD5=aaeb519d3f276b810d46642

python引用DLL文件的方法

  本文实例讲述了python引用DLL文件的方法.分享给大家供大家参考.具体分析如下: 在python中调用dll文件中的接口比较简单,如我们有一个test.dll文件,内部定义如下: ? 1 2 3 4 5 6 7 extern "C" { int __stdcall test( void* p, int len) { return len; } } 在python中我们可以用以下两种方式载入 1. ? 1 2 import ctypes dll = ctypes.windll.L

python删除过期文件的方法

  本文实例讲述了python删除过期文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # remove all jpeg image files of an expired modification date = mtime # you could also use creation date (ctime) or last access

python修改操作系统时间的方法

  本文实例讲述了python修改操作系统时间的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #-*- coding:utf-8 -*- import socket import struct import time import win32api TimeServer = '210.72.145.44' #国家授时中心ip Port = 123 def getTime(