Python 根据歌词时间戳切割歌曲

Python 根据歌词时间戳切割歌曲

操作

1.查看歌词时间戳格式
在这里插入图片描述
2.代码实现

#!/user/bin/env python
# _*_coding:utf-8_*_
from pydub import AudioSegment
import re


with open("C:/Users/悟空传 (2020重唱版)",'r',encoding='utf-8') as f: #打开歌词文件
    time_list = []
    lyric_list = []
    #循环获取每一句歌词时间戳,
    while True:
        line = f.readline()
        if not line:
            break
        line = line.strip('\n')
        p = '(?<=\[)[^]]+'
        b = re.findall(p,line)
        time_list.append(b[0])

        # print(line.split(']')[1])
        if line.split(']')[1]=="": #获取无效音频
            s = 'sil' #无效音频
            # print(s)
            lyric_list.append(s)
        else:
            # print(line.split(']')[1])
            lyric_list.append(line.split(']')[1])



print(len(time_list))
print(len(lyric_list))

with open('C:/Users/Desktop/test.txt','w+') as f: #截取音频名称与歌词保存位置
    cout = 0
    for i,j in zip(range(len(time_list)),lyric_list):
        cout += 1
        start_time = time_list[i]  # 获取开始截取时间戳

        print(start_time)
        if i < len(time_list) - 1:
            stop_time = time_list[i + 1]  # 获取结束时间戳
            print(stop_time)

            file_name = "C:/Users/悟空传 (2020重唱版).mp3"  # 歌曲保存路径

            sound = AudioSegment.from_mp3(file_name)

            print("time:", start_time, "~", stop_time)
            start_time = (float(start_time.split(':')[0]) * 60 + float(start_time.split(':')[1])) * 1000 + float(
                '0.{}'.format(start_time.split('.')[-1])) * 100  # 开始时间转换为毫秒

            stop_time = (float(stop_time.split(':')[0]) * 60 + float(stop_time.split(':')[1])) * 1000 + float(
                '0.{}'.format(stop_time.split('.')[-1])) * 100  # 结束时间转换为毫秒

            print("ms:", start_time, "~", stop_time)  # 打印 开始时间与结束时间

            word = sound[start_time:stop_time]  # 截取
            f.write("{}.mp3".format(cout)+'\t'+j+"\n") #截取的音频名字与对应歌打印

            word.export('C:/Users/{}.mp3'.format(cout), format="mp3",  # 保存位置
                        tags={'artist': 'AppLeU0', 'album': cout})

3.保存结果展示
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值