如何修改Whisper代码以输出带时间戳的SRT字幕文件?
把Whisper视频转录结果改成带时间戳的SRT格式的修改方法
你当前的代码能正常将视频转录为TXT文件,要改成输出带时间戳的SRT格式,需要做以下几处修改:
- 改用Whisper返回的
segments数据:原代码只提取了合并后的完整文本result['text'],而result['segments']中存储了每个语音片段的起始时间、结束时间和对应文本,这是生成带时间戳SRT的核心数据。 - 实现时间格式转换函数:Whisper返回的时间是秒数,需要转换成SRT标准的
HH:MM:SS,mmm格式(毫秒部分用逗号分隔)。 - 按SRT格式规则生成内容:SRT的每条条目遵循「序号 → 开始时间-->结束时间 → 文本 → 空行」的结构,需要遍历
segments逐一生成每条内容。 - 修改输出文件后缀:将原来的
.txt改为.srt,确保文件格式符合要求。
修改后的完整代码
import os import whisper from tqdm import tqdm # 定义时间转换函数:秒数转SRT格式的时间字符串 def format_time(seconds): hours = int(seconds // 3600) minutes = int((seconds % 3600) // 60) secs = int(seconds % 60) millis = int((seconds - int(seconds)) * 1000) return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}" # 视频文件所在文件夹 root_folder = "C:\\Video" # 加载Whisper模型 print("加载Whisper模型...") model = whisper.load_model("base") print("模型加载完成。") # 统计待转录的MP4文件数量 print("统计待转录文件数量...") num_files = sum(1 for dirpath, _, filenames in os.walk(root_folder) for filename in filenames if filename.endswith(".mp4")) print(f"待处理文件数:{num_files}") # 批量转录并生成SRT文件 with tqdm(total=num_files, desc="正在转录文件") as pbar: for dirpath, _, filenames in os.walk(root_folder): for filename in filenames: if filename.endswith(".mp4"): filepath = os.path.join(dirpath, filename) # 执行转录,保留segments数据 result = model.transcribe(filepath, fp16=False, verbose=True) # 生成SRT内容 srt_content = [] for idx, segment in enumerate(result['segments'], start=1): start_time = format_time(segment['start']) end_time = format_time(segment['end']) text = segment['text'].strip() # 按SRT格式拼接每条内容 srt_content.append(f"{idx}") srt_content.append(f"{start_time} --> {end_time}") srt_content.append(text) srt_content.append("") # 条目间空行分隔 # 写入SRT文件 filename_no_ext = os.path.splitext(filename)[0] srt_file_path = os.path.join(dirpath, f"{filename_no_ext}.srt") with open(srt_file_path, 'w', encoding='utf-8') as f: f.write('\n'.join(srt_content)) pbar.update(1)
关键修改说明
format_time函数:把Whisper返回的秒数转换成SRT要求的时间格式,确保小时、分钟、秒都是两位数字,毫秒是三位数字。- 遍历
segments生成SRT:逐个处理每个语音片段,按SRT规则拼接序号、时间范围和文本,条目之间用空行分隔。 - 编码设置:写入文件时指定
encoding='utf-8',避免中文等特殊字符出现乱码问题。
内容的提问来源于stack exchange,提问作者Darren Webster
相关产品推荐
相关产品推荐

