feat: ASR自动字幕能力(领域模型+渲染管道接入+可扩展ASR后端) #292
Reference in New Issue
Block a user
Delete Branch "feat/asr-auto-subtitles"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ASR 自动字幕能力
完成内容
字幕领域模型
packages/domain/subtitle.pyASR 服务抽象层
packages/ports/asr_service.pyMock ASR 实现
packages/adapters/asr/mock_asr_service.py字幕生成器
apps/worker/video_processing/subtitle_generator.pySubtitleConfig 扩展
渲染管道接入
UnifiedRenderServiceWorker 端集成
关键设计
测试
规模
🔍 代码审计结论:有条件通过(1 P1 + 2 P2)
✅ 做得好的地方
🔴 P1 - ffmpeg调用不符合项目规范(必须修复)
_extract_audio方法直接用subprocess.run(["ffmpeg", ...])裸调用ffmpeg,而项目统一用FFMPEG_BIN常量 +run_ffmpeg工具函数。问题:
修复方式:统一使用
from video_processing.ffmpeg_utils import FFMPEG_BIN, run_ffmpeg。🟡 P2 - 单素材ASR映射不准(MVP可接受,需标注)
MVP版本只用第一个有音频的素材做ASR,然后按比例映射到整个视频时长。
多素材/转场/调速场景下,字幕时间轴会有明显偏差。
建议:
🟡 P2 - ASR配置未纳入worker配置体系
asr_service_factory.py直接读ASR_PROVIDER环境变量,未集成到worker_app.core.config的配置体系中。建议:把 ASR 相关配置(provider、api_key、endpoint等)加到 WorkerSettings 中,统一管理。
💡 小建议
_wrap_text函数中英文混排场景下按字符数换行可能不太美观,后续可考虑按宽度计算267e208e42tob46bdcc35a【代码审计】PR #292 ASR自动字幕能力 审查结论:不推荐
总览
复审验证(P1问题:_extract_audio裸调用ffmpeg)
P1 - _extract_audio仍使用裸subprocess.run调用ffmpeg
位置:apps/worker/video_processing/unified_render_service.py → _extract_audio
问题描述:
_extract_audio方法仍使用import subprocess + subprocess.run直接调用"ffmpeg",未使用项目统一的run_ffmpeg工具函数。
同一文件中其他FFmpeg调用都使用run_ffmpeg(可从ffmpeg_utils导入看出),此处不一致。
具体问题:
修复建议:改用run_ffmpeg工具函数:
亮点
必须修复P1问题(_extract_audio改用run_ffmpeg)后重新提交审计。