feat(P1): 一键生成配音支持从配音素材库选用户上传的音频 #567

Merged
auto-approve-bot merged 2 commits from fix/p1-oneclick-voice-asset-selection into develop 2026-07-19 10:29:58 +08:00
+36 -1
View File
@@ -473,9 +473,44 @@ def _mux_audio_track(video_path: Path, audio_path: str, output_path: Path) -> No
def _download_voice_asset(voice_library_id: str, local_path: Path) -> bool:
"""下载配音文件"""
"""下载配音文件
支持两种来源(按优先级):
1. 配音素材库 asset — 将 voice_library_id 当 asset_id 查 asset 表,
找到则用 asset.storage_key 下载(用户上传到配音库的音频)
2. 旧版 voice/{id}.mp3 路径 — 向后兼容
"""
if not voice_library_id:
return False
# 方式1:先尝试当 asset_id 查素材库(用户上传到配音库的音频)
try:
from worker_app.db import SessionLocal
from packages.adapters.sqlalchemy_impl.asset_repository import (
SQLAlchemyAssetRepository,
)
session = SessionLocal()
try:
repo = SQLAlchemyAssetRepository(session)
asset = repo.find_by_id(voice_library_id)
if asset and asset.storage_key:
# 是素材库的配音 asset,用 storage_key 下载
logger.info(
"配音素材来自素材库: asset_id=%s storage_key=%s",
voice_library_id,
asset.storage_key,
)
ok = download_asset(asset.storage_key, local_path)
if ok and local_path.exists() and local_path.stat().st_size > 0:
return True
finally:
session.close()
except Exception as e:
logger.warning("查询配音asset失败,fallback旧路径: %s", e)
# 方式2:旧版路径(向后兼容)
storage_key = f"voice/{voice_library_id}.mp3"
return download_asset(storage_key, local_path)