将lrc歌词整体提前或推迟
本帖最后由 mlyde 于 2021-5-4 21:55 编辑将lrc歌词整体提前或推迟
想把以前下载的一些歌配上歌词,但有的歌词比歌曲整体慢了几秒,一句句手改就太麻烦了,于是写了这个python脚本,顺便练练手,将lrc中的时间标签全部加或减一点儿。(当然,要手动听一下确认要加还是减,加减的幅度)
本来lrc是支持时间补偿的,就是在前面注释的位置加上` ` 就可以,但我的播放器不支持这样,只好改一下时间标签了。
#### 说明
因为是覆盖保存,使用前请备份您要修改的文件。
如果出现文件编码不支持,请将 .lrc 文件以 UTF-8 保存。可以用记事本打开>文件>另存为>编码,选择 UTF-8 。
#### 使用方法
输入要修改的 .lrc 文件名,若不在同一目录下,需输入完整路径,带不带引号均可。
例: `TheStar-阿泱.lrc`,`D:\Desktop\TheStar-阿泱.lrc`,`“D:\Desktop\TheStar-阿泱.lrc”` 等。
输入歌词要提前的时间,单位为秒(s),推迟时间用负数。
例: `1`,`0.5`,`-2` 等。
确认覆盖并保存。
#### 代码
# 将.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
# 找到时间标签, 匹配
timestamp = re.findall('\[({0,3}\:{0,2}\.{0,3})\]', lrc)
timestamp_n = []
for i in range(len(timestamp)):
min = timestamp.split(':')
second_n = int(min) * 60 + float(min) - 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, timestamp_n)
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转ass然后丢进aegisub修改会方便很多 很有用的创意!
希望有EXE文件,方便我等不玩python的筒子使用。 yeqin 发表于 2021-5-5 16:08
很有用的创意!
希望有EXE文件,方便我等不玩python的筒子使用。
exe的话,编译出来文件有点大,从github上下载吧。
下载Windows命令行程序https://github.com/mlyde/lrc-timetag-change/raw/main/lrc-timetag-change.exe
(用 pyinstaller 编译为exe,大小:6.53MB,无python环境可下载运行) mlyde 发表于 2021-5-7 18:41
exe的话,编译出来文件有点大,从github上下载吧。
下载Windows命令行程序https://github.com/mlyde/lrc ...
已经顺利将相册音乐字幕改变,加了10秒{:1_896:}
页:
[1]