如何将SRT文件中的单行句子随机拆分为多行(适配时间轴)
SRT字幕单行文本拆分至对应空时间轴的解决方案
针对你需要将合并后的单行字幕拆分到后续空时间轴段落的需求,以下是一个可直接运行的Python脚本,能自动完成文本拆分与分配:
def split_srt_long_text(input_path, output_path): # 读取SRT文件 with open(input_path, 'r', encoding='utf-8') as f: content = f.read() # 按空行分割成单个字幕块 blocks = content.split('\n\n') processed_blocks = [] i = 0 while i < len(blocks): block = blocks[i].strip() if not block: i += 1 continue # 解析字幕块的编号、时间轴、文本 lines = block.split('\n') if len(lines) < 3: processed_blocks.append(block) i += 1 continue idx, time_line, *text_lines = lines text = ' '.join(text_lines).strip() # 检查当前块是否有文本,且后续是连续的空文本块 if text and i + 1 < len(blocks): # 收集后续所有空文本的块 empty_blocks = [] j = i + 1 while j < len(blocks): empty_block = blocks[j].strip() if not empty_block: j += 1 continue empty_lines = empty_block.split('\n') if len(empty_lines) >= 2 and len(empty_lines) < 3: empty_blocks.append((empty_lines[0], empty_lines[1])) j += 1 else: break if empty_blocks: # 计算需要拆分的段数(当前块 + 空块数量) split_count = len(empty_blocks) + 1 # 按逗号拆分文本,尽量均匀分配 text_parts = text.split(', ') # 如果拆分的部分不够,再按空格拆分 while len(text_parts) < split_count: new_parts = [] for part in text_parts: sub_parts = part.split(' ', 1) if len(sub_parts) > 1: new_parts.extend(sub_parts) else: new_parts.append(part) text_parts = new_parts # 分配文本到当前块和空块 current_part = ', '.join(text_parts[:len(text_parts) - len(empty_blocks)]) if current_part and not current_part.endswith(','): current_part += ',' processed_block = f"{idx}\n{time_line}\n{current_part}" processed_blocks.append(processed_block) # 分配剩余部分到空块 remaining_parts = text_parts[len(text_parts) - len(empty_blocks):] for k in range(len(empty_blocks)): empty_idx, empty_time = empty_blocks[k] part = ', '.join(remaining_parts[k:k+1]).strip() if k < len(remaining_parts)-1 and not part.endswith(','): part += ',' processed_empty_block = f"{empty_idx}\n{empty_time}\n{part}" processed_blocks.append(processed_empty_block) i = j continue # 普通块直接添加 processed_blocks.append(block) i += 1 # 重新组合成SRT内容 output_content = '\n\n'.join(processed_blocks) # 写入输出文件 with open(output_path, 'w', encoding='utf-8') as f: f.write(output_content) # 使用示例:替换为你的输入输出文件路径 split_srt_long_text('input.srt', 'output.srt')
脚本说明
- 读取与解析:将SRT文件按空行分割为独立字幕块,识别每个块的编号、时间轴和文本内容
- 空块检测:自动识别有长文本的字幕块后续的连续空文本块
- 文本拆分:优先按逗号拆分长文本,若拆分段数不足则按空格拆分,确保能分配到所有空块
- 内容分配:将拆分后的文本片段依次分配到原长文本块和后续的空块,保持时间轴与编号不变
- 结果输出:重新组合处理后的字幕块,生成符合格式的SRT文件
使用方式
- 将上述代码保存为
srt_splitter.py - 替换脚本中的
input.srt和output.srt为你的实际文件路径 - 运行脚本:
python srt_splitter.py
内容的提问来源于stack exchange,提问作者Ömer Work
相关产品推荐
相关产品推荐

