如何将JSON文件转换为SRT字幕文件:详细步骤与工具指南
在视频制作、多语言翻译或字幕处理中,JSON和SRT是两种常见的文件格式:JSON(JavaScript Object Notation)常用于存储结构化数据(如字幕文本、时间轴),而SRT(SubRip Subtitle)则是通用的字幕文件格式,被大多数视频播放器和编辑工具支持,将JSON文件转换为SRT文件,能帮助你在不同场景下灵活使用字幕数据,本文将详细介绍转换的原理、步骤及实用工具,让你轻松完成格式转换。
了解JSON与SRT文件的核心差异
在转换前,先明确两者的结构特点,避免“张冠李戴”:
-
JSON文件:结构化数据存储,通常以“键值对”形式组织字幕信息,常见结构包括:
id:字幕序号(如1、2、3);start/end:字幕开始/结束时间(单位多为毫秒或秒,需注意格式差异);text:字幕文本(可能包含多行,用\n分隔)。
示例JSON片段:[ { "id": 1, "start": 1000, "end": 5000, "text": "你好,世界!" }, { "id": 2, "start": 6000, "end": 10000, "text": "欢迎学习字幕转换。" } ]
-
SRT文件:纯文本格式,由“序号+时间轴+字幕文本”三部分组成,每部分占一行,序号与时间轴之间、时间轴与文本之间需空一行,核心规则:
- 序号:从1开始的连续数字;
- 时间轴:
开始时间 --> 结束时间,格式为时:分:秒,毫秒(如00:00:01,000 --> 00:00:05,000); - 文本:支持多行,无需特殊标记(换行直接回车)。
示例SRT片段:1 00:00:01,000 --> 00:00:05,000 你好,世界!
2 00:00:06,000 --> 00:00:10,000 欢迎学习字幕转换。
转换的核心步骤:从JSON到SRT的逻辑拆解
无论使用工具还是手动处理,转换的核心逻辑可拆解为3步:解析JSON数据→调整时间格式→生成SRT文本。
步骤1:解析JSON数据,提取关键字段
首先需要读取JSON文件,提取每个字幕条目的id、start(开始时间)、end(结束时间)和text(字幕文本),若JSON中时间单位是毫秒(如1000毫秒=1秒),需先转换为秒;若已是秒,可直接跳过此步。
步骤2:将时间戳转换为SRT标准格式
SRT时间格式为HH:MM:SS,mmm(时:分:秒,毫秒),而JSON中的时间可能是毫秒(如1000)或秒(如1.0),转换公式:
-
毫秒转SRT时间:
- 将毫秒数除以1000,得到总秒数(如1000ms → 1s);
- 计算小时:
总秒数 ÷ 3600,取整数部分; - 计算分钟:
(总秒数 % 3600) ÷ 60,取整数部分; - 计算秒:
(总秒数 % 3600) % 60,取整数部分; - 计算毫秒:
(总秒数 % 1) × 1000,取3位补零。
示例:1000ms →00:00:01,000;60000ms →00:01:00,000。
-
秒(带小数)转SRT时间:
方法类似,只需将“总秒数”直接替换为JSON中的秒数值(如1.5s →00:00:01,500)。
步骤3:按SRT格式生成文本并保存
将转换后的序号、时间轴、字幕文本按“序号→空行→时间轴→空行→文本→空行”的顺序拼接,生成SRT文件,注意:
- 序号需连续递增;
- 时间轴的
-->前后需有空格; - 文本中的
\n需替换为实际换行(若JSON文本已用\n分隔,直接保留即可)。
转换方法推荐:从手动到自动化
根据JSON数据的复杂度和处理量,可选择以下3种方法:
方法1:手动转换(适合少量简单数据)
若JSON文件只有1-2条字幕,或时间格式已接近SRT标准,可手动调整。
操作步骤:
- 用记事本/VS Code打开JSON文件,复制
text; - 手动计算时间戳(如1000ms → 00:00:01,000);
- 按SRT格式粘贴到新文本文件,保存为
.srt后缀。
优点:无需工具,快速直观;
缺点:易出错,仅适用于极少量数据。
方法2:使用在线转换工具(适合无编程基础的用户)
在线工具能自动解析JSON并生成SRT,无需安装软件,适合偶尔转换需求。
推荐工具:
- JSON to SRT Converter(https://json2srt.com/):上传JSON文件,自动转换并下载SRT;
- Online Subtitle Converter(https://convertio.co/zh/json-srt/):支持JSON与SRT互转,可预览结果。
操作步骤:
- 打开在线工具页面;
- 点击“上传”或“拖拽”,选择JSON文件;
- 工具自动解析,若时间格式异常(如单位为秒),需勾选“时间单位为秒”选项;
- 点击“转换”,下载生成的SRT文件。
优点:操作简单,无需技术背景;
缺点:需上传文件至第三方平台,隐私数据需谨慎;部分工具对复杂JSON结构支持不佳。
方法3:编程脚本转换(适合批量/复杂数据处理)
若JSON数据量大(如上百条字幕)、时间格式特殊(如单位为秒且含小数),或需频繁转换,编程脚本是最优解,以下是Python实现方案(需安装json库,Python自带无需额外安装)。
示例:Python脚本转换JSON(毫秒时间单位)
import json
def json_to_srt(json_file, srt_file):
# 读取JSON文件
with open(json_file, 'r', encoding='utf-8') as f:
subtitles = json.load(f)
srt_content = []
for sub in subtitles:
# 转换时间戳(毫秒转SRT格式)
start_ms = sub['start']
end_ms = sub['end']
start_time = ms_to_srt_time(start_ms)
end_time = ms_to_srt_time(end_ms)
# 构建SRT行
srt_lines = [
str(sub['id']),
f"{start_time} --> {end_time}",
sub['text'],
"" # 空行分隔
]
srt_content.append("\n".join(srt_lines))
# 写入SRT文件
with open(srt_file, 'w', encoding='utf-8') as f:
f.write("\n".join(srt_content))
def ms_to_srt_time(ms):
"""毫秒转SRT时间格式(HH:MM:SS,mmm)"""
total_seconds = ms / 1000
hours = int(total_seconds // 3600)
minutes = int((total_seconds % 3600) // 60)
seconds = int(total_seconds % 60)
milliseconds = int((total_seconds % 1) * 1000)
return f"{hours:02d}:{minutes:02d}:{seconds:02d},{milliseconds:03d}"
# 使用示例
json_to_srt("input.json", "output.srt")
print("转换完成!")
示例:Python脚本转换JSON(秒时间单位,含小数)
若JSON时间单位为秒(如"start": 1.5),修改ms_to_srt_time函数为:
def sec_to_srt_time(sec):
"""秒(带小数)转SRT时间格式"""
total_seconds = float(sec)
hours = int(total


还没有评论,来说两句吧...