【python脚本】lrc歌词文件转换为srt字幕文件

【python脚本】lrc歌词文件转换为srt字幕文件代码 python 脚本 lrc 歌词文件转换为 srt 字幕文件

大家好,欢迎来到IT知识分享网。

创建

创建一个py文件,例如:

convert_lrc_to_srt.py 

实现

py代码如下

import os import re # 定义函数,将时间格式从lrc转换为srt格式 def convert_time_format(lrc_time): # lrc时间格式:[mm:ss.xx] -> srt时间格式:hh:mm:ss,xxx match = re.match(r'\[(\d+):(\d+)\.(\d+)\]', lrc_time) if match: minutes = int(match.group(1)) seconds = int(match.group(2)) milliseconds = int(match.group(3)) * 10 return f'00:{minutes:02}:{seconds:02},{milliseconds:03}' return None # 将时间转为秒数,便于比较 def time_to_seconds(time_str): # 修正解析时间格式,srt格式为 hh:mm:ss,xxx try: time_part, milliseconds = time_str.split(',') hours, minutes, seconds = map(int, time_part.split(':')) total_seconds = hours * 3600 + minutes * 60 + seconds + int(milliseconds) / 1000 return total_seconds except ValueError: raise ValueError(f"Invalid time format: {time_str}") # 计算两个时间之间的差距,并返回 srt 格式的时间 def calculate_end_time(start_time, next_start_time=None, duration=2): start_seconds = time_to_seconds(start_time) if next_start_time: end_seconds = time_to_seconds(next_start_time) else: end_seconds = start_seconds + duration # 如果没有下一个时间,默认持续2秒 # 将秒数转回 srt 时间格式 hours = int(end_seconds // 3600) minutes = int((end_seconds % 3600) // 60) seconds = int(end_seconds % 60) milliseconds = int((end_seconds % 1) * 1000) return f'{hours:02}:{minutes:02}:{seconds:02},{milliseconds:03}' # 读取lrc文件并转换为srt文件 def convert_lrc_to_srt(lrc_file): srt_file = lrc_file.replace('.lrc', '.srt') with open(lrc_file, 'r', encoding='utf-8') as lrc: lines = lrc.readlines() srt_lines = [] subtitle_counter = 1 time_list = [] # 用于存储时间信息,计算结束时间 for line in lines: time_matches = re.findall(r'\[\d+:\d+\.\d+\]', line) text = re.sub(r'\[\d+:\d+\.\d+\]', '', line).strip() for time in time_matches: start_time = convert_time_format(time) if start_time and text: time_list.append((start_time, text)) # 生成srt内容,推断结束时间 for i in range(len(time_list)): start_time, text = time_list[i] if i < len(time_list) - 1: next_start_time = time_list[i + 1][0] else: next_start_time = None # 计算结束时间 end_time = calculate_end_time(start_time, next_start_time) srt_lines.append(f'{subtitle_counter}\n{start_time} --> {end_time}\n{text}\n') subtitle_counter += 1 # 写入srt文件 with open(srt_file, 'w', encoding='utf-8') as srt: srt.writelines(srt_lines) # 在当前目录查找所有lrc文件并进行转换 def main(): current_dir = os.getcwd() for file in os.listdir(current_dir): if file.endswith('.lrc'): convert_lrc_to_srt(file) if __name__ == '__main__': main() 

使用

然后命令行输入:

注意:需将需要转化的文件和py放同一个文件夹

python convert_lrc_to_srt.py

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156338.html

(0)
上一篇 2025-02-13 17:45
下一篇 2025-02-13 18:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信