如何将带时间戳字幕文件中的多行断句合并为单行?
解决方案
方法1:使用带正则替换的文本编辑器(如VS Code、Notepad++)
适合快速处理小到中等规模的字幕文件:
- 打开目标SRT字幕文件
- 开启正则表达式匹配模式(VS Code按
Ctrl+F后点击.*图标;Notepad++在替换窗口勾选「正则表达式」) - 查找框输入:
(\n)(?!\d+\n|\d{2}:\d{2}:\d{2},\d{3} -->)- 逻辑:仅匹配字幕内容内部的换行,排除序号行、时间轴行前后的换行
- 替换框输入:
(单个空格) - 点击「全部替换」完成合并
方法2:使用命令行工具(sed)
适合批量处理或熟悉终端操作的用户,在Linux/macOS或Windows WSL环境下执行:
sed -E ':a;N;$!ba;s/\n(?!([0-9]+\n|\d{2}:\d{2}:\d{2},\d{3} -->))/ /g' input.srt > output.srt
- 说明:
:a;N;$!ba:将整个文件读入缓冲区,实现跨行匹配- 正则规则与编辑器方法一致,把字幕内容内的换行替换为空格
input.srt为源文件路径,output.srt为处理后的目标文件
方法3:Python脚本(支持自定义逻辑)
如果需要处理特殊格式或添加额外过滤规则,可使用脚本:
def merge_srt_lines(input_path, output_path): with open(input_path, 'r', encoding='utf-8') as f: lines = f.read().splitlines() result = [] current_subtitle = [] for line in lines: # 判断是否为序号行、时间轴行或空行 if line.isdigit() or '-->' in line or line.strip() == '': # 合并累积的字幕内容并写入结果 if current_subtitle: result.append(' '.join(current_subtitle)) current_subtitle = [] result.append(line) else: # 累积字幕内容行 current_subtitle.append(line.strip()) # 处理最后一条未写入的字幕 if current_subtitle: result.append(' '.join(current_subtitle)) with open(output_path, 'w', encoding='utf-8') as f: f.write('\n'.join(result)) # 替换为你的文件路径 merge_srt_lines('input.srt', 'output.srt')
- 运行脚本后,会自动保留SRT原有结构,仅合并每个条目内的多行字幕
内容的提问来源于stack exchange,提问作者July Elizabeth
相关产品推荐
相关产品推荐

