Mp3Cut
import sys
from mutagen.mp3 import MP3
"""
需: pip install mutagen
"""
class Mp3Cut(object):
def __init__(self):
# 读取歌曲名称
self.file = sys.argv[1]
# 获取比特率(kbps), kb是1000bit, p是per, s是second, 即每秒传输的数据量
mp3 = MP3('王力宏 - 天地龙鳞.mp3')
bitrate = mp3.info.bitrate
# kb / 8 就是比特(bit)到字节(Byte)的转换, 即每秒传输多少字节
self.kBps = bitrate / 8
# 获取文件名(不包括文件扩展名)
self.name = self.file[:self.file.rindex('.')]
def start_time(self):
tt = input("请输入开始时间, 分秒以.分隔: ")
minute = int(tt.split('.')[0]) # 取分
second = int(tt.split('.')[1]) # 取秒
self.tms = minute * 60 + second # 一共多少秒
def stop_time(self):
pt = input("请输入结束时间, 分秒以.分隔: ")
minute = int(pt.split('.')[0])
second = int(pt.split('.')[1])
self.pms = minute * 60 + second
def cut_mp3(self):
first_part = self.tms * self.kBps # 秒数(s) * 速率(kBps) = 数据大小(kB), 这就是开始截取的位置
last_part = (self.pms - self.tms) * self.kBps # 同理, 这就是结束截取的位置
with open(self.file, 'rb') as start_f:
start_f.read(int(first_part)) # 读取到要截取的位置
with open(f'{self.name}_cut.mp3', 'wb') as stop_f:
stop_f.write(start_f.read(int(last_part))) # 在新文件写入到要结束截取的位置
def main():
mp3 = Mp3Cut()
mp3.start_time()
mp3.stop_time()
mp3.cut_mp3()
if __name__ == '__main__':
main()
运行:
python a.py xxxx.mp3
请输入开始时间(分秒以.分隔):0.50
请输入结束时间(分秒以.分隔):1.20
输出:
即可截取本首歌曲从0分50秒到1分20中之间的30秒长度的歌曲