feat(P1): 一键生成配音支持从配音素材库选用户上传的音频 #567
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user