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

在B站下载了一个英文视频,点开来看,发现没有字幕,又在B站上下了字幕,是json格式的,但我的PotPlayer不支持json格式的字幕,顿时感觉被坑了,上网搜了搜json字幕转换其他字幕格式的工具,结果并没有这种东西,倒是找到了一篇srt字幕转json字幕的博客,反正闲着没事,我就参照着这篇博客用python写了个将json字幕转换为srt字幕的脚本。

先看看json字幕的格式:

from为开始时间,to为结束时间,location是位置,content是字幕内容。

再看看srt字幕的格式:

首先第一行是序号,第二行是开始时间(时:分:秒,小数位,如00:00:02,81就是2.81秒)和终止时间,第三行是字幕文字,后面一定要加上一个空行。

所以我们要做的工作主要就是把json文件的时间格式转换为srt文件的时间格式,另外再把字幕和序号添加上就可以了。

把该程序文件和json字幕文件放在同一文件夹下,运行此程序即可。

代码如下:

import json
import math
import os

for doc in os.listdir():    # 遍历当前文件夹的所有文件
    file = ''  # 这个变量用来保存数据
    i = 1
    if (doc[-4:] == 'json'):    # 若是json文件则进行处理
        name = doc[:-5]     # 提取文件名
        # 将此处文件位置进行修改,加上utf-8是为了避免处理中文时报错
        with open(doc, encoding='utf-8') as f:
            datas = json.load(f)  # 加载文件数据
            f.close()
        for data in datas:
            start = data['from']  # 获取开始时间
            stop = data['to']  # 获取结束时间
            content = data['content']  # 获取字幕内容
            file += '{}\n'.format(i)  # 加入序号
            hour = math.floor(start) // 3600
            minute = (math.floor(start) - hour * 3600) // 60
            sec = math.floor(start) - hour * 3600 - minute * 60
            minisec = int(math.modf(start)[0] * 100)  # 处理开始时间
            file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2)  # 将数字填充0并按照格式写入
            file += ' --> '
            hour = math.floor(stop) // 3600
            minute = (math.floor(stop) - hour * 3600) // 60
            sec = math.floor(stop) - hour * 3600 - minute * 60
            minisec = abs(int(math.modf(stop)[0] * 100 - 1))  # 此处减1是为了防止两个字幕同时出现
            file += str(hour).zfill(2) + ':' + str(minute).zfill(2) + ':' + str(sec).zfill(2) + ',' + str(minisec).zfill(2)
            file += '\n' + content + '\n\n'  # 加入字幕文字
            i += 1
        with open('./{}.srt'.format(name), 'w', encoding='utf-8') as f:
            f.write(file)  # 将数据写入文件
            f.close()

最后得到的srt文件如图所示:

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
### 回答1: 可以使用json模块中的loads函数将json字符串转换Python对象,例如列表。示例代码如下: ```python import json json_str = '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' lst = json.loads(json_str) print(lst) ``` 输出结果: ``` [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}] ``` 在上述代码中,我们将json字符串赋值给json_str变量,然后使用json.loads函数将其转换Python对象(列表),并将其赋值给lst变量。最后,我们可以打印lst变量以验证转换是否成功。 ### 回答2: 在Python中将json转换为列表非常简单。首先,需要导入json模块。接下来,使用json模块的load函数将json表加载为字典形式。然后,使用字典的values()函数来取出所有的值,并将其转换为列表形式。最后,将列表打印出来或进行其他的操作。 下面是具体的代码示例: import json # 假设json_str是一个包含json表的字符串 json_str = '{"name": "Alice", "age": 20, "city": "New York"}' # 将json表加载为字典形式 data = json.loads(json_str) # 将字典的值转换为列表形式 list_data = list(data.values()) # 打印列表 print(list_data) 运行以上代码,输出结果为: ['Alice', 20, 'New York'] 这样,我们就成功地将json转换为了列表形式。列表中的元素顺序与json表中的键值对定义的顺序一致。如果需要按照特定的顺序或方式处理列表,可以使用Python内置的列表操作函数和方法。 ### 回答3: 在Python中,可以使用json模块将json转换为列表。首先,需要导入json模块。然后,使用json.loads()函数将json转换Python对象。最后,使用list()函数将Python对象转换为列表。 具体操作如下: 导入json模块: import json 定义json表的字符串: json_str = '["apple", "banana", "orange"]' 将json转换Python对象: json_obj = json.loads(json_str) 将Python对象转换为列表: list_obj = list(json_obj) 最终得到的list_obj是一个列表,其中包含了原先在json表中的数据。这样,我们就成功将json转换为列表。 注意:转换过程中要确保json表的格式是正确的,否则可能会出现解析错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值