mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-09-08 09:06:40 +08:00
feat(bilibili): 优先走官方 player API 直拉字幕
之前 BilibiliDownloader.download_subtitles 走的是 yt-dlp 的 writesubtitles 路径,对 B 站签名/Cookie 的兼容性差,常常空手而归,落到音频下载 + Whisper 转写的慢路径。 新增 bilibili_subtitle.BilibiliSubtitleFetcher: - /x/web-interface/view?bvid=... → 拿 cid - /x/player/wbi/v2?bvid=...&cid=... → 拿 subtitle 列表(subtitle_url 已带 auth_key) - 优先级:人工中文 > AI 中文 > 任意中文 > 任意非空 - fetch JSON body 解析为 TranscriptResult - 通过 CookieConfigManager 自动注入 SESSDATA cookie(AI 字幕必需) bilibili_downloader.download_subtitles 顺序改为:先试新 fetcher,失败再回退到原 yt-dlp 路径。NoteGenerator 的字幕优先逻辑无需改动——它本来就调 download_subtitles。 效果: - B 站视频如果有字幕(人工或 AI),直接秒拿,跳过音频下载 + 转写 - 完全绕开 MLX Whisper 不可用 / 模型未下载 等转写器问题 - 拿不到字幕时仍可走原音频转写路径 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
3bd8b670ca
commit
702b57c165
@@ -8,6 +8,7 @@ from typing import Union, Optional, List
|
||||
import yt_dlp
|
||||
|
||||
from app.downloaders.base import Downloader, DownloadQuality, QUALITY_MAP
|
||||
from app.downloaders.bilibili_subtitle import BilibiliSubtitleFetcher
|
||||
from app.models.notes_model import AudioDownloadResult
|
||||
from app.models.transcriber_model import TranscriptResult, TranscriptSegment
|
||||
from app.utils.path_helper import get_data_dir
|
||||
@@ -155,6 +156,15 @@ class BilibiliDownloader(Downloader, ABC):
|
||||
:param langs: 优先语言列表
|
||||
:return: TranscriptResult 或 None
|
||||
"""
|
||||
# 1) 优先走 B 站官方 player API(直拉,无需下视频;AI 字幕需 SESSDATA cookie)
|
||||
try:
|
||||
result = BilibiliSubtitleFetcher().fetch_subtitles(video_url)
|
||||
if result and result.segments:
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.warning(f"player API 直拉字幕异常,回退到 yt-dlp: {e}")
|
||||
|
||||
# 2) Fallback:原 yt-dlp 路径(更脆弱,遇到签名/Cookie 问题失败概率较高)
|
||||
if output_dir is None:
|
||||
output_dir = get_data_dir()
|
||||
if not output_dir:
|
||||
|
||||
Reference in New Issue
Block a user