使用Python将lrc歌词转换为srt字幕格式

思路

比较简单的文本处理问题
主要注意点:
1. 存在空白时间和无空白时间两种形式的lrc文件,需要分别处理
2. 最后一句的时间段需要单独计算

源码

util.py

# -*- coding: utf-8 -*-"""
@author: WUNNAN@Created on: 2022/7/28 20:38
"""# str -> int
def convert_str(time):a, f = map(str, time.split("."))m, s = map(int, a.split(":"))f = int(f)*10return m, s, f# 普通位置歌词时间计算
def cal_time(time):m, s, f = convert_str(time)if f-50 < 0:s -= 1if s < 0:m -= 1else:f += 950return m, s, f# 最后一句时间计算 默认1s
def cal_last_time(m, s, f):if s+10 > 60:m += 1s -= 50else:s += 10return m, s, f# 处理最后一句
def deal_last_lyric(last):last_time = last[0].replace("[", "")last_lyric = last[1]m1, s1, f1 = convert_str(last_time)m2, s2, f2 = cal_last_time(m1, s1, f1)last_period = "00:%02d:%02d,%03d --> 00:%02d:%02d,%03d" % (m1, s1, f1, m2, s2, f2)return [last_period, last_lyric]# 处理普通歌词
def deal_common_lyric(blocks_time, blocks_lyrics):tmp = []for i in range(len(blocks_time)):tmp += deal_time(blocks_time[i], blocks_lyrics[i])return tmp# 普通歌词 分块处理
def deal_time(block_time, block_lyrics):tmp = []for i in range(len(block_time)-1):m1, s1, f1 = convert_str(block_time[i])m2, s2, f2 = cal_time(block_time[i+1])period = "00:%02d:%02d,%03d --> 00:%02d:%02d,%03d"%(m1, s1, f1, m2, s2, f2)tmp.append([period, block_lyrics[i]])return tmp# 整理 写入
def prepare_and_write(tmp, LRC_path):res = []for i in range(len(tmp)):res.append(str(i + 1) + "\n")res.append(tmp[i][0] + "\n")res.append(tmp[i][1] + "\n")res.append("\n")SRT_path = LRC_path.replace("lrc", "srt")with open(SRT_path, "w+", encoding="utf-8") as file:file.writelines(res)print("转换完成!\n")

main.py

# -*- coding: utf-8 -*-"""
@author: WUNNAN@Created on: 2022/7/28 20:37
"""
from util import *def start_deal(file):times = []lyrics = []for sen in file[:-1]:t, l = map(str, sen.split("]"))times.append(t.replace("[", ""))lyrics.append(l)# 最后一句last = file[-1].split("]")# 其余歌词blocks_lyrics = []blocks_time = []start = 0flag = Falsefor i in range(len(lyrics) - 1):if len(lyrics[i + 1]) == 0:flag = True# 以空白时间为分割线,构造出一个二维列表blocks_lyrics.append(lyrics[start: i + 1])blocks_time.append(times[start: i + 2])start = i + 2if flag:tmp = deal_common_lyric(blocks_time, blocks_lyrics)else:tmp = deal_time(times, lyrics)tmp.append(deal_last_lyric(last)) # 添加最后一句return tmpif __name__ == '__main__':while True:path = input("请输入LRC文件路径:\n").replace("\\", "//")try:file = open(path, encoding="utf-8").read().split("\n")tmp = start_deal(file)prepare_and_write(tmp, path)except:print("读取文件失败!\n")

视频教程

lrc歌词到srt字幕的转换程序

Python将lrc歌词转换为srt字幕格式相关推荐

  1. 导入LRC歌词转换为SRT字幕,并添加到全部视频中

    如何剪辑视频,比如将LRC歌词转为SRT字幕,并添加到视频中,实现字幕效果呢?今天小编给大家分享一个剪辑技巧,它能同时剪辑多段视频素材,下面一起来操作. 所需工具 安装一个媒体梦工厂 视频素材若干.L ...

  2. Python实现json字幕转换为srt字幕

    在B站下载了一个英文视频,点开来看,发现没有字幕,又在B站上下了字幕,是json格式的,但我的PotPlayer不支持json格式的字幕,顿时感觉被坑了,上网搜了搜json字幕转换其他字幕格式的工具, ...

  3. 【Python文本处理】基于运动路线记录GPX文件的基础运动速度求解,并转为SRT字幕格式(不需要安装三方库)

    [Python文本处理]基于运动路线记录GPX文件的基础运动速度求解,并转为SRT字幕格式(不需要安装三方库) 解析 GPX文件格式 GPX文件本身其实就是坐标.海拔.时间.心率等综合性的xml文件 ...

  4. 文本文件自动计算生成srt字幕格式的文件

    根据txt文本文件自动计算生成大致srt字幕格式的文件,方便导入到剪映中一键生成配音. 读取指定txt文件中的文本 将文本分成多个句子 去除空句子 计算每个句子的持续时间 保存srt文件 import ...

  5. srt 字幕格式 和 json数组之间的相互转换

    最近在处理一个关于编辑视频字幕的项目,其中有部分逻辑值得做下记录. 1.转化 srt 所需时间格式. function srtTimestamp(seconds) {seconds = seconds ...

  6. 讯飞语音转文字结果转成srt字幕格式(Java源码)

    有时需要把讯飞语音识别结果转成srt字幕,通过下面的java代码即可实现. import com.alibaba.fastjson.JSONArray; import com.alibaba.fast ...

  7. lrc歌词转srt,歌词格式转换

    使用的laravel框架 /*** LRC 2 SRT*/ public function getLrc2srt() {//lrc文件的路径$sLrcFile = storage_path() . ' ...

  8. java 获取srt字幕格式时间 时分秒毫秒

    private static String mytimeStamp(Long mytime) { // 获取srt 格式时间String format="yyyy-MM-dd@HH:mm:s ...

  9. Python将时长转换为MM:SS格式

    # -*- coding:utf-8 -*- #Auth:Jeson def fmt_duration(seconds): u""" 将视频时长转换成mm:ss的形式 & ...

最新文章

  1. Android实现左右滑动效果
  2. Linux的内存分页管理
  3. jQuery针对多个元素的相同点击事件
  4. python编程入门教学电子书-Python编程入门电子书教程,看这几个就够了
  5. HttpUrlConnection get和post简单实现(疑惑解决)
  6. Xcode的一些控制台命令
  7. 如何匹配两段文本的语义?
  8. Highcharts+Spring饼图使用实例
  9. 什么是同步异步?阻塞非阻塞?
  10. Shell:while语句、for语句、if语句
  11. acm常见错误-持续更新
  12. js调用数科阅读器_多种方式实现JS调用后台方法进行数据交互
  13. PHP回调函数用法及分析
  14. 48-Elasticsearch-2(DSL查询_搜索结果处理_RestClient查询文档)
  15. 手把手教你做html日历
  16. 项目需求变更原因及处理
  17. LINK 2001 找不到__iob_func, 找不到__fprintf
  18. github上 开源项目_在GitHub上组织开源项目的工作流程的3个技巧
  19. R3300L Android相关的记录
  20. 天圆地方· 围棋界的盲棋天才 -- 鲍云

热门文章

  1. cocoscreator练手 入门 Flappy Bird 像素鸟项目(2)加入水管
  2. 词法分析(二):词法规则的形式化——正规式与正规集
  3. pil版本下载linux,linux 安装 pil
  4. KIE - SDMGR
  5. 麒麟子Cocos Creator实用技巧六:游戏背景拖拽实现
  6. 公司注册邮箱应该选择哪一种好
  7. Python3学习笔记23-StringIO和BytesIO
  8. Unity_UIWidgets - 文字图标Icon
  9. python keyboard hook_键盘监控的实现Ⅰ——Keyboard Hook API函数
  10. 多语言通信基础 03 go和python的rpc通信