fix(asr): use content_dir for subtitle output instead of video_path
PR Test / lint (pull_request) Successful in 2s
PR Test / lint (pull_request) Successful in 2s
- Add content_dir field to ASRInput schema
- Pass content_dir from pipeline when creating ASRInput
- Modify _try_official_subtitle to use content_dir for output
- Modify _run_whisper_basic to use content_dir for output
- Add validation for empty video_path in Whisper fallback
Root cause: DownloadProcessor sets content_file="" for video types,
causing Path("").parent to resolve to current directory instead of
content directory. Subtitle files were written to wrong location.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -172,9 +172,10 @@ class ASRProcessor:
|
||||
Note:
|
||||
无字幕返回 None(不是抛异常),让流程继续到 Whisper
|
||||
"""
|
||||
video_path = Path(input_data.video_path)
|
||||
output_dir = video_path.parent
|
||||
base_name = video_path.stem
|
||||
# 使用 content_dir 作为输出目录(而不是从 video_path 推断)
|
||||
output_dir = Path(input_data.content_dir)
|
||||
# 使用 content_id 作为基础文件名
|
||||
base_name = f"{input_data.platform}_{input_data.content_id}_subtitle"
|
||||
|
||||
# 输出文件路径
|
||||
txt_path = output_dir / f"{base_name}.txt"
|
||||
@@ -343,11 +344,18 @@ class ASRProcessor:
|
||||
ASR 处理结果
|
||||
|
||||
Raises:
|
||||
RuntimeError: Whisper.cpp 路径不存在或执行失败
|
||||
RuntimeError: Whisper.cpp 路径不存在或执行失败,或 video_path 为空
|
||||
"""
|
||||
# 检查 video_path 是否有效
|
||||
if not input_data.video_path:
|
||||
raise RuntimeError(
|
||||
"video_path 为空,无法执行 Whisper 语音识别。"
|
||||
"请确保视频文件已下载(对于没有官方字幕的视频,需要先下载视频文件)。"
|
||||
)
|
||||
|
||||
video_path = Path(input_data.video_path)
|
||||
output_dir = video_path.parent
|
||||
base_name = video_path.stem
|
||||
output_dir = Path(input_data.content_dir)
|
||||
base_name = f"{input_data.platform}_{input_data.content_id}_whisper"
|
||||
|
||||
# 获取 Whisper.cpp 路径
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user