Python修改MP3文件的方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-10 15:10:32
オリジナル
1936 人が閲覧しました

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

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート