news 2026/4/3 4:53:45

Whisper字幕编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Whisper字幕编程

Whisper生成字幕的编程基础,核心是理解Whisper的核心API用法字幕格式生成逻辑常见场景的代码实现,以下内容从基础到实战,覆盖本地调用、字幕格式转换、批量处理等核心能力,所有代码可直接运行,适合编程基础扎实的你快速上手。

一、Whisper核心概念与环境准备

1. 核心概念

  • 模型层级:Whisper提供tiny/base/small/medium/large-v3等模型,越大精度越高、速度越慢(large-v3支持多语言、实时字幕、词级时间戳)。
  • 核心能力:语音转文字(ASR)、自动语言检测、时间戳生成(支持句级/词级)、多格式字幕输出(SRT/ASS/VTT)。
  • 输入输出:支持音频文件(MP3/WAV/MP4等)、实时音频流;输出包含文本、时间戳、语言类型,可封装为标准字幕格式。

2. 环境安装(最简版)

# 安装核心依赖(Python 3.8+)pipinstallopenai-whisper# 核心库pipinstallffmpeg-python# 音频格式处理(可选,用于解析视频中的音频)# 安装PyTorch(GPU加速必备,CPU可跳过)pip3installtorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

注:首次运行Whisper会自动下载模型(如large-v3约6GB),建议提前下载到本地指定路径(可通过WHISPER_CACHE_DIR环境变量配置)。

二、Whisper字幕编程核心API(基础版)

1. 最简示例:音频转SRT字幕

以下代码实现「本地音频文件→语音转写→生成SRT字幕」,是所有字幕开发的基础:

importwhisperimportosdefaudio_to_srt(audio_path:str,output_srt_path:str=None,model_size:str="base"):""" 基础功能:音频转SRT字幕 :param audio_path: 输入音频/视频路径(支持MP3/WAV/MP4等) :param output_srt_path: 输出SRT路径,默认与音频同目录 :param model_size: 模型大小(tiny/base/small/medium/large-v3) """# 1. 加载模型(首次运行自动下载)model=whisper.load_model(model_size)# 2. 语音转写(开启词级时间戳,提升字幕精度)# language="zh" 可指定语言,默认自动检测result=model.transcribe(audio_path,language="zh",# 强制指定中文,避免误检测word_timestamps=True,# 开启词级时间戳verbose=False# 关闭日志输出)# 3. 生成SRT文件(默认路径:音频文件名.srt)ifoutput_srt_pathisNone:output_srt_path=os.path.splitext(audio_path)[0]+".srt"# 4. 解析转写结果,写入SRTwithopen(output_srt_path,"w",encoding="utf-8")asf:# 遍历每一段字幕(segments是句级,words是词级)foridx,segmentinenumerate(result["segments"],1):# 格式化开始/结束时间(SRT格式:00:00:00,000 --> 00:00:05,000)start=format_timestamp(segment["start"])end=format_timestamp(segment["end"])# 字幕文本(去除首尾空格)text=segment["text"].strip()# 写入SRTf.write(f"{idx}\n{start}-->{end}\n{text}\n\n")print(f"✅ SRT字幕生成完成:{output_srt_path}")returnoutput_srt_pathdefformat_timestamp(seconds:float)->str:""" 辅助函数:将秒数转换为SRT标准时间格式 :param seconds: 时间戳(秒),如123.456 :return: 格式化字符串,如00:02:03,456 """hours=int(seconds//3600)minutes=int((seconds%3600)//60)secs=seconds%60# 格式:HH:MM:SS,mmm(注意是逗号,不是点)returnf"{hours:02d}:{minutes:02d}:{secs:06.3f}".replace(".",",")# 测试调用if__name__=="__main__":audio_to_srt(audio_path="test_audio.mp3",# 你的音频文件model_size="large-v3"# 推荐large-v3,中文精度最高)

2. 代码核心解析

核心代码作用
whisper.load_model("large-v3")加载指定大小的模型,large-v3对中文支持最好
model.transcribe(...)核心转写函数,返回包含文本、时间戳的字典
word_timestamps=True开启词级时间戳,可实现逐词字幕(如短视频卡点字幕)
format_timestamp()转换秒数为SRT标准格式(SRT要求逗号分隔毫秒,而非点)
result["segments"]句级字幕列表,每个元素包含start(开始秒数)、end(结束秒数)、text(文本)

3. 输入输出示例

  • 输入:test_audio.mp3(内容:“你好,欢迎学习Whisper字幕编程”)
  • 输出test_audio.srt内容:
    1 00:00:00,000 --> 00:00:02,500 你好,欢迎学习Whisper字幕编程

三、进阶场景:Whisper字幕编程扩展

1. 从视频中提取音频并生成字幕

很多场景下输入是视频(MP4/AVI),需先提取音频再转写,结合ffmpeg-python实现:

importffmpegdefvideo_to_srt(video_path:str,model_size:str="large-v3")->str:""" 视频转SRT字幕(自动提取音频) """# 1. 提取视频中的音频(临时WAV文件)temp_audio="temp_audio.wav"ffmpeg.input(video_path).output(temp_audio,acodec="pcm_s16le",ac=1,ar="16k").run(overwrite_output=True)# 2. 调用基础函数生成SRTsrt_path=audio_to_srt(temp_audio,model_size=model_size)# 3. 删除临时音频os.remove(temp_audio)returnsrt_path# 测试调用video_to_srt("test_video.mp4")

2. 批量处理多个音频/视频文件

适合规模化生成字幕,如批量处理视频素材:

defbatch_generate_subtitles(input_dir:str,model_size:str="large-v3"):""" 批量生成字幕:遍历目录下所有音频/视频文件 :param input_dir: 输入目录 """# 支持的文件格式supported_formats=(".mp3",".wav",".mp4",".avi",".mov")# 遍历目录forfileinos.listdir(input_dir):file_path=os.path.join(input_dir,file)# 跳过文件夹,只处理支持的格式ifos.path.isfile(file_path)andfile.lower().endswith(supported_formats):print(f"\n正在处理:{file}")# 区分音频/视频iffile.lower().endswith((".mp3",".wav")):audio_to_srt(file_path,model_size=model_size)else:video_to_srt(file_path,model_size=model_size)# 测试调用:处理./videos目录下所有文件batch_generate_subtitles("./videos")

3. 生成词级字幕(逐字显示)

适合短视频、教程视频的逐字字幕,基于words字段实现:

defaudio_to_word_srt(audio_path:str,output_srt_path:str=None):""" 生成词级SRT字幕(逐字显示) """model=whisper.load_model("large-v3")result=model.transcribe(audio_path,language="zh",word_timestamps=True)ifoutput_srt_pathisNone:output_srt_path=os.path.splitext(audio_path)[0]+"_word.srt"withopen(output_srt_path,"w",encoding="utf-8")asf:idx=1# 遍历每一段,再遍历每个词forsegmentinresult["segments"]:forwordinsegment["words"]:start=format_timestamp(word["start"])end=format_timestamp(word["end"])text=word["word"].strip()iftext:# 跳过空文本f.write(f"{idx}\n{start}-->{end}\n{text}\n\n")idx+=1print(f"✅ 词级字幕生成完成:{output_srt_path}")returnoutput_srt_path

四、性能优化与常见问题

1. 性能优化(提速/降内存)

  • GPU加速:安装CUDA版PyTorch,模型加载和转写速度提升5-10倍(large-v3 GPU转写1小时音频约5分钟)。
  • 模型选择:测试用base模型,生产用large-v3;中文场景优先large-v3,英文场景可用medium。
  • 音频预处理:将音频转为16kHz单声道WAV(Whisper原生支持,无需额外处理)。
  • 批量处理:避免循环加载模型(模型加载占80%时间),一次加载多次调用。

2. 常见问题与解决

问题解决方法
中文识别错误多1. 改用large-v3模型;2. 指定language="zh";3. 提升音频清晰度(降噪)
时间戳不准1. 开启word_timestamps=True;2. 音频重采样为16kHz;3. 手动调整错误时间戳
模型下载慢1. 配置环境变量WHISPER_CACHE_DIR指定本地路径;2. 手动下载模型文件放到缓存目录
内存不足1. 改用small/medium模型;2. 拆分长音频为多个短音频;3. 关闭其他占用内存的程序

五、Whisper字幕与视频框架集成

结合之前推荐的Remotion/MoviePy,可实现「字幕+视频+配音」一键合成,核心逻辑:

  1. 用Whisper生成SRT字幕文件;
  2. 视频框架(如Remotion)读取SRT文件,渲染到视频画面;
  3. FFmpeg优化字幕样式(字体、颜色、位置)。

示例(MoviePy集成SRT字幕):

frommoviepy.editorimportVideoFileClip,TextClip,CompositeVideoClipfrompysrtimportopenasopen_srtdefadd_srt_to_video(video_path:str,srt_path:str,output_path:str):""" MoviePy将SRT字幕叠加到视频 """video=VideoFileClip(video_path)srt=open_srt(srt_path,encoding="utf-8")clips=[video]# 基础视频# 遍历字幕,生成文本剪辑forsubinsrt:# 字幕文本text=sub.text# 字幕时长(秒)start=sub.start.seconds+sub.start.milliseconds/1000end=sub.end.seconds+sub.end.milliseconds/1000duration=end-start# 创建文本剪辑text_clip=TextClip(text,fontsize=40,color="white",font="SimHei",# 中文黑体stroke_color="black",stroke_width=2# 描边,提升可读性).set_position(("center","bottom")).set_duration(duration).set_start(start)clips.append(text_clip)# 合成视频final=CompositeVideoClip(clips)final.write_videofile(output_path,codec="libx264",audio_codec="aac")# 测试调用add_srt_to_video("test_video.mp4","test_video.srt","video_with_sub.mp4")

总结

Whisper字幕编程的核心要点:

  1. 基础用法:通过model.transcribe()获取带时间戳的文本,格式化后写入SRT文件;
  2. 关键参数language="zh"指定中文、word_timestamps=True开启词级时间戳,提升字幕精度;
  3. 扩展能力:支持批量处理、视频音频提取、与视频框架集成,适配自动化视频生产;
  4. 优化技巧:GPU加速、模型按需选择,平衡精度与速度。

掌握这些基础后,你可轻松将Whisper集成到之前的视频自动化流水线中,实现「配音→字幕→视频合成」的全流程代码化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 12:48:14

如何用PDF补丁丁实现PDF全能工具零成本应用?超实用技巧大盘点

如何用PDF补丁丁实现PDF全能工具零成本应用?超实用技巧大盘点 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: htt…

作者头像 李华
网站建设 2026/4/2 14:41:43

Blender拓扑优化技术解析:从问题诊断到自动化网格重构

Blender拓扑优化技术解析:从问题诊断到自动化网格重构 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 在三维建模工作流中…

作者头像 李华
网站建设 2026/4/1 18:51:38

5个维度解析QR码技术:从移动识别痛点到全场景价值落地

5个维度解析QR码技术:从移动识别痛点到全场景价值落地 【免费下载链接】zxing ZXing ("Zebra Crossing") barcode scanning library for Java, Android 项目地址: https://gitcode.com/gh_mirrors/zx/zxing 在数字化浪潮席卷的今天,QR码…

作者头像 李华
网站建设 2026/3/25 23:04:50

如何用uie_pytorch实现零样本信息抽取:2024全功能指南

如何用uie_pytorch实现零样本信息抽取:2024全功能指南 【免费下载链接】uie_pytorch PaddleNLP UIE模型的PyTorch版实现 项目地址: https://gitcode.com/gh_mirrors/ui/uie_pytorch 副标题:零基础入门通用信息抽取框架的实战案例与性能调优 信息…

作者头像 李华
网站建设 2026/3/29 21:52:44

如何安全使用GTA5菜单注入:3个专业技巧让你轻松掌握YimMenu

如何安全使用GTA5菜单注入:3个专业技巧让你轻松掌握YimMenu 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi…

作者头像 李华
网站建设 2026/3/27 19:35:57

如何用Obsidian Local REST API解锁你的笔记自动化潜能

如何用Obsidian Local REST API解锁你的笔记自动化潜能 【免费下载链接】obsidian-local-rest-api Unlock your automation needs by interacting with your notes in Obsidian over a secure REST API. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-local-rest-ap…

作者头像 李华