You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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')

脚本说明

  1. 读取与解析:将SRT文件按空行分割为独立字幕块,识别每个块的编号、时间轴和文本内容
  2. 空块检测:自动识别有长文本的字幕块后续的连续空文本块
  3. 文本拆分:优先按逗号拆分长文本,若拆分段数不足则按空格拆分,确保能分配到所有空块
  4. 内容分配:将拆分后的文本片段依次分配到原长文本块和后续的空块,保持时间轴与编号不变
  5. 结果输出:重新组合处理后的字幕块,生成符合格式的SRT文件

使用方式

  1. 将上述代码保存为srt_splitter.py
  2. 替换脚本中的input.srt和output.srt为你的实际文件路径
  3. 运行脚本:python srt_splitter.py

内容的提问来源于stack exchange,提问作者Ömer Work

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:25:26