|
- # 将.lrc歌词全部提前或推迟, 并以原文件名覆盖保存
- import os
- import re
- # 文件名
- filename = ''
- # 歌词
- lrc = ''
- def readfile():
- """ 打开(.lrc)文件并返回文件内容 """
- global filename
- filename = input('filename(.lrc):')
- filename = filename.replace('"', '', 2) # 将两个"删去
- if os.path.isfile(filename):
- if os.path.exists(filename):
- # file exists
- try:
- with open(filename, 'r', encoding='utf-8') as fp:
- return fp.read()
- except UnicodeDecodeError:
- print('\a文件编码不支持!')
- os.system('pause')
- return 0
- else:
- # file not exists
- return 0
- else:
- # not a normal file
- return 0
- def change(second):
- """ 修改并写回改变后的内容 """
- global lrc
- # 找到时间标签, 匹配 [01:23.456]
- timestamp = re.findall('\[([0-9]{0,3}\:[0-9]{0,2}\.[0-9]{0,3})\]', lrc)
- timestamp_n = []
- for i in range(len(timestamp)):
- min = timestamp[i].split(':')
- second_n = int(min[0]) * 60 + float(min[1]) - second
- if second_n < 0: # 避免出现负值
- second_n = 0
- min_n = second_n // 60
- second_n = second_n % 60
- timestamp_n.append(('%02d' % min_n) + ':' + ('%05.2f' % second_n))
- lrc = lrc.replace(timestamp[i], timestamp_n[i])
- return lrc
- def save():
- """ 覆盖保存文件 """
- with open(filename, 'w', encoding='utf-8') as fp:
- fp.write(lrc)
- def main():
- """ 主函数 """
- global lrc
- # 读取文件
- while True:
- lrc = readfile()
- if not lrc:
- print('\aNot Found! (文件名为文件夹 或 文件不存在)\n')
- else:
- break
- # 询问提前时间
- while True:
- try:
- second = float(input('输入歌词要提前的时间(s): '))
- break
- # 防止输入非数字导致的程序终止
- except ValueError:
- print('请输入数字!\n\a')
- # 修改lrc
- lrc = change(second)
- # 提示保存
- while True:
- result = input('是否覆盖并保存(Y/N)? ')
- if result == 'Y' or result == 'y':
- save()
- break
- if result == 'N' or result == 'n':
- break
- if __name__ == "__main__":
- main()
复制代码
将lrc歌词整体提前或推迟
说明
使用方法
代码
想把以前下载的一些歌配上歌词,但有的歌词比歌曲整体慢了几秒,一句句手改就太麻烦了,于是写了这个python脚本,顺便练练手,将lrc中的时间标签全部加或减一点儿。(当然,要手动听一下确认要加还是减,加减的幅度)
本来lrc是支持时间补偿的,就是在前面注释的位置加上 [Offset:毫秒数] 就可以,但我的播放器不支持这样,只好改一下时间标签了。
说明
因为是覆盖保存,使用前请备份您要修改的文件。
如果出现文件编码不支持,请将 .lrc 文件以 UTF-8 保存。用记事本打开>文件>另存为>编码,选择 UTF-8 。
使用方法
输入要修改的 .lrc 文件名,若不在同一目录下,需输入完整路径,带不带引号均可。
例: TheStar-阿泱.lrc,D:\Desktop\TheStar-阿泱.lrc,“D:\Desktop\TheStar-阿泱.lrc” 等。
输入歌词要提前的时间,单位为秒(s),推迟时间用负数。
例: 1,0.5,-2 等。
确认覆盖并保存。
————————————————
版权声明:本文为CSDN博主「mlyde」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mlyde/article/details/116402331
|
|