
Buzz 转录后处理指南字幕 Resize 重排、结束时间扩展与多格式导出【免费下载链接】buzzBuzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper.项目地址: https://gitcode.com/GitHub_Trending/buz/buzz导读本文围绕 Buzz 的转录后处理能力展开讲解如何对已生成的音频/视频转录结果进行编辑、重排与导出。你将掌握三条核心技能一是使用 Resize 工具对字幕重新组合含词级时间戳模式下的按标点/按长度合并二是使用Extend end time延长字幕在屏幕上的停留时间三是将转录导出为 TXT、SRT、VTT 三种格式。文中所有功能均对应当前仓库的实际实现并给出源码级佐证可直接对照 transcription_resizer_widget.py 等文件深入阅读。一、进入编辑视图双击转录记录当音频或视频文件的转录完成后转录结果会以列表形式展示在主窗口。要开始编辑与导出只需在转录列表中双击目标转录记录即可打开转录查看器窗口。这一交互在主窗口代码中有明确实现TranscriptionTasksTableWidget发出doubleClicked信号由主窗口的on_table_double_clicked方法接收并校验后打开查看器见 main_window.py。查看器工具栏按顺序提供Export导出、Translate翻译、Resize重排、Identify Speakers说话人识别、Find查找等按钮其中 Resize 按钮的构建位于 transcription_viewer_widget.py点击后弹出TranscriptionResizerWidget对话框对应 on_resize_button_clicked。二、Resize 工具概览两种能力模式转录查看器中的Resize按钮会打开一个独立对话框其中包含四大功能区见 TranscriptionResizerWidgetSettings设置控制重排结果以何种方式保存Extend end time扩展结束时间延长字幕段结束时间Resize Options重排选项按目标长度拆分字幕段Merge Options合并选项将多个字幕段合并为符合规则的字幕。Resize 工具的能力范围取决于转录生成时是否开启了word-level timings词级时间戳选项转录生成时的设置可用的重排能力已启用词级时间戳可按标点、按最大长度、按静音间隙合并重组为字幕可自由组合多种拆分规则未启用词级时间戳仅能指定期望字幕最大长度将长段拆分这一区分在源码中体现为当transcription.word_level_timings 1时Resize Options分组被禁用并提示Available only if word level timings were disabled during transcription仅当转录时未启用词级时间戳时可用而Merge Options分组则恰好相反仅在词级时间戳已启用时可操作见 transcription_resizer_widget.py 与 L326-L328。词级时间戳由转录任务配置中的word_level_timings字段控制默认值为False见 transcriber.py在数据库中对应transcription表的word_level_timings BOOLEAN DEFAULT FALSE列见 schema.sql。界面侧则通过文件转录表单中的Word-level timings复选框设置见 file_transcription_form_widget.pyCLI 模式下由--word_timestamps参数传入见 cli.py。保存方式设置新建转录还是就地覆盖对话框顶部的Settings区只有一个选项——Create new transcript新建转录复选框默认勾选。其行为如下勾选默认重排/扩展/合并的结果会复制原转录生成一条新的转录记录并写入结果原转录保持不变方便对比取消勾选直接用新片段替换原转录的片段就地更新。该偏好会持久化保存到设置项TRANSCRIPTION_RESIZER_CREATE_NEW_TRANSCRIPT见 on_create_new_transcript_toggled。保存逻辑集中在save_segments方法勾选时调用copy_transcriptionupdate_transcription_as_completed未勾选时调用replace_transcription_segments见 L337-L352。相关行为均有测试覆盖见 transcription_resizer_widget_test.py。三、Merge Options基于词级时间戳的字幕重组当转录开启了词级时间戳时Merge Options区提供三种可自由组合的合并规则点击Merge按钮后后台线程即开始重组。3.1 按静音间隙合并Merge by gap勾选后两个相邻片段之间的静音时间若小于设定阈值默认 0.2 秒将被合并为同一条字幕底层对应 stable-whisper 重组规则中的mg{gap}gap 为秒数。3.2 按标点分割Split by punctuation勾选后字幕将优先在句号、问号、感叹号等标点处切分避免字幕在句中被硬切默认的标点规则字符串为.* /./. /。/?/? //!/! //,/,即支持英文句点、中文句号、问号中英文、感叹号中英文与逗号底层对应重组规则sp{rule}。3.3 按最大长度分割Split by max length勾选后任何超过指定字符数的字幕段都会被拆分为多条默认上限为 42 个字符底层对应重组规则sl{length}。3.4 合并规则的组合与覆盖三种规则的组合会编译为一条 stable-whisper 风格的regroup_string由on_merge_button_clicked动态拼装见 L430-L459仅按间隙合并时mg0.2间隙合并 按长度分割时mg0.2421各规则之间以_连接例如同时启用三项时形如mg0.2421_sp..._sl42。此外该规则字符串允许通过环境变量BUZZ_MERGE_REGROUP_RULE整体覆盖便于高级用户或自动化脚本注入自定义重组规则见 L459。3.5 底层处理流程与语言适配合并操作在后台QThread中执行见 TranscriptionWorker.run核心流程为从数据库读取该转录的全部片段将每个片段的起止时间从毫秒换算为秒连同文本构造成词级数据结构调用 stable-whisper 的transcribe_any传入regroup_string完成重组重组后的结果再换算回毫秒写入数据库。值得注意的语言细节代码内置了不使用空格分隔词的语言集合NON_SPACE_LANGUAGES {zh, ja, th, lo, km, my}中文、日文、泰文、老挝文、高棉文、缅甸文这些语言的词之间不会插入空格而其他语言会在词后追加空格见 L40 与 L57-L73。同时重组会以句子结尾标点.,!,?,。,,见SENTENCE_END正则为自然断点预分段保证重组素材的语义完整性。3.6 关于音频静音分析的说明原文档说明如果音频文件仍存在于系统中词级时间戳合并还会分析音频中的静音以提升字幕时间轴的准确性。这是该功能的设计目标。需要补充的是从当前仓库源码看transcribe_any调用处的vad与suppress_silence参数当前被硬编码为False并留有 TODO 注释说明 VAD 与静音抑制在 Mac/Windows 编译版中无法正常工作见 L104-L114。因此该静音分析属于设计中启用、当前版本被暂时关闭的能力使用时请以实际运行行为为准。四、Resize Options无词级时间戳时的拆分如果转录未开启词级时间戳Merge Options区不可用此时只能使用Resize Options区Desired subtitle length期望字幕长度数值输入框范围为1100 个字符默认 42见 L256-L259点击Resize后每个超过该长度的字幕段会被拆分成多条更短的字幕。其实现位于on_resize_button_clicked见 L360-L396先把数据库片段转成srt.Subtitle再调用srt_equalizer.split_subtitle(..., methodpunctuation)优先按标点拆分最后过滤掉起止时间相同的空段并保存。测试用例test_resize_updates_in_place_when_unchecked验证了长句会被拆成多条字幕段见 transcription_resizer_widget_test.py。五、Extend end time延长字幕停留时间该功能自 Buzz1.4.3起提供用于让字幕在屏幕上显示更久。操作方式在Extend end time区域的输入框中填写要延长的秒数默认 0.2 秒界面默认值为0.2点击Extend endings按钮。实现逻辑位于on_extend_button_clicked见 L398-L428输入的秒数会先乘以 1000 转换为毫秒内部时间单位对每个片段将结束时间加上该增量安全性保证若延长后的结束时间越过下一条片段的开始时间则自动截断为下一条的开始时间new_end min(new_end, next_start)从而保证字幕段之间绝不重叠时间轴始终合法有序输入非法数值时回退到默认 0.2 秒不会导致程序异常。六、导出为字幕与纯文本转录查看器工具栏的Export按钮提供导出菜单。菜单项按格式 - 内容命名例如TXT - Text、SRT - Text、VTT - Text若转录已生成翻译还会出现对应的XXX - Translation菜单项用于导出译文版本见 export_transcription_menu.py。6.1 支持的三种输出格式导出格式定义在OutputFormat枚举中共三种见 transcriber.py格式说明TXT纯文本无时间戳相邻字幕段间停顿超过阈值时自动分段SRT标准 SubRip 字幕序号 HH:MM:SS,mmm时间戳毫秒以逗号分隔VTTWebVTT 字幕文件头为WEBVTT毫秒以点号分隔6.2 写入逻辑要点实际写入由write_output完成见 file_transcriber.pyTXT 模式段落分段时间间隔由环境变量BUZZ_PARAGRAPH_SPLIT_TIME控制默认 2000 毫秒——即前一段结束与后一段开始间隔超过 2 秒时插入空行分段SRT/VTT 模式逐段输出序号与时间戳时间戳由to_timestamp统一格式化见 L232-L239。导出时默认保存路径由转录记录按格式推导get_output_file_path随后弹出系统保存对话框确认路径后写盘。七、常见操作流程小结转录完成后在主窗口双击目标转录记录打开查看器点击工具栏Resize按钮打开重排对话框视转录是否带词级时间戳选择带词级时间戳→ 在 Merge Options 中勾选按间隙/按标点/按长度并点击 Merge不带词级时间戳→ 在 Resize Options 中设定目标长度并点击 Resize如需字幕停留更久在 Extend end time 中填写秒数并点击 Extend endings返回查看器点击Export选择 TXT/SRT/VTT 保存结果若勾选了Create new transcript原转录保留、新结果以新记录呈现可随时对照。八、相关代码与测试索引重排/合并/扩展对话框实现transcription_resizer_widget.py转录查看器与 Resize 按钮入口transcription_viewer_widget.py导出菜单实现export_transcription_menu.py输出格式与写入逻辑file_transcriber.py、transcriber.py词级时间戳开关GUI/CLI/数据库file_transcription_form_widget.py、cli.py、schema.sql重排功能测试transcription_resizer_widget_test.py【免费下载链接】buzzBuzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper.项目地址: https://gitcode.com/GitHub_Trending/buz/buzz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考