解决添加音频找不到的问题。

This commit is contained in:
Hommy
2026-03-04 20:43:06 +08:00
parent b7b7709c14
commit 3edb1842e0
+81 -27
View File
@@ -61,17 +61,17 @@ def easy_create_material(
try:
# 4. 添加音频(必须的)
audio_added = add_audio_material(script, audio_url)
audio_added = add_audio_material(script, draft_id, audio_url)
logger.info(f"Audio material added: {audio_added}")
# 5. 添加视频(如果提供)
if video_url and video_url.strip() and video_url.lower() != "null":
video_added = add_video_material(script, video_url)
video_added = add_video_material(script, draft_id, video_url)
logger.info(f"Video material added: {video_added}")
# 6. 添加图片(如果提供)
if img_url and img_url.strip() and img_url.lower() != "null":
image_added = add_image_material(script, img_url)
image_added = add_image_material(script, draft_id, img_url)
logger.info(f"Image material added: {image_added}")
# 7. 添加文字(如果提供)
@@ -91,12 +91,18 @@ def easy_create_material(
raise CustomException(CustomError.MATERIAL_CREATE_FAILED)
def add_video_material(script: ScriptFile, video_url: str) -> bool:
def add_video_material(script: ScriptFile, draft_id: str, video_url: str) -> bool:
"""
添加视频素材到草稿(固定5秒时长)
与add_videos接口保持一致的处理方式:
1. 创建规范的视频资源目录
2. 使用parse_video_data解析视频信息
3. 调用add_video_to_draft添加视频
Args:
script: 草稿文件对象
draft_id: 草稿ID
video_url: 视频文件URL
Returns:
@@ -105,7 +111,13 @@ def add_video_material(script: ScriptFile, video_url: str) -> bool:
try:
logger.info(f"Adding video material: {video_url}")
# 构造视频信息JSON(固定5秒时长)
# 1. 创建视频资源目录(与add_videos保持一致)
draft_dir = os.path.join(config.DRAFT_DIR, draft_id)
draft_video_dir = os.path.join(draft_dir, "assets", "videos")
os.makedirs(name=draft_video_dir, exist_ok=True)
logger.info(f"Created video directory: {draft_video_dir}")
# 2. 构造视频信息JSON(固定5秒时长)
video_infos = json.dumps([{
"video_url": video_url,
"width": 1920,
@@ -116,14 +128,20 @@ def add_video_material(script: ScriptFile, video_url: str) -> bool:
"volume": 1.0
}])
# 直接使用草稿对象添加视频轨道和片段
# 3. 解析视频信息
from src.service.add_videos import parse_video_data, add_video_to_draft
video_items = parse_video_data(video_infos)
if video_items:
track_name = f"video_track_{helper.gen_unique_id()}"
# 设置 relative_index=10 确保视频轨道在主视频轨道之上,避免与主轨道冲突
script.add_track(track_type=TrackType.video, track_name=track_name, relative_index=10)
add_video_to_draft(script, track_name, "", video_items[0])
if not video_items:
logger.error("No video items parsed")
return False
# 4. 添加视频轨道
track_name = f"video_track_{helper.gen_unique_id()}"
script.add_track(track_type=TrackType.video, track_name=track_name, relative_index=10)
logger.info(f"Added video track: {track_name}")
# 5. 添加视频到轨道(传递正确的视频资源目录)
add_video_to_draft(script, track_name, draft_video_dir, video_items[0])
return True
except Exception as e:
@@ -131,12 +149,18 @@ def add_video_material(script: ScriptFile, video_url: str) -> bool:
return False
def add_image_material(script: ScriptFile, img_url: str) -> bool:
def add_image_material(script: ScriptFile, draft_id: str, img_url: str) -> bool:
"""
添加图片素材到草稿
与add_images接口保持一致的处理方式:
1. 创建规范的图片资源目录
2. 使用parse_image_data解析图片信息
3. 调用add_image_to_draft添加图片
Args:
script: 草稿文件对象
draft_id: 草稿ID
img_url: 图片文件URL
Returns:
@@ -145,7 +169,13 @@ def add_image_material(script: ScriptFile, img_url: str) -> bool:
try:
logger.info(f"Adding image material: {img_url}")
# 构造图片信息JSON(默认尺寸和3秒显示时长)
# 1. 创建图片资源目录(与add_images保持一致)
draft_dir = os.path.join(config.DRAFT_DIR, draft_id)
draft_image_dir = os.path.join(draft_dir, "assets", "images")
os.makedirs(name=draft_image_dir, exist_ok=True)
logger.info(f"Created image directory: {draft_image_dir}")
# 2. 构造图片信息JSON(默认尺寸和3秒显示时长)
image_infos = json.dumps([{
"image_url": img_url,
"width": 1024,
@@ -154,14 +184,20 @@ def add_image_material(script: ScriptFile, img_url: str) -> bool:
"end": 3000000, # 3秒(3 * 1000000微秒)
}])
# 直接使用草稿对象添加图片轨道和片段
# 3. 解析图片信息
from src.service.add_images import parse_image_data, add_image_to_draft
image_items = parse_image_data(image_infos)
if image_items:
track_name = f"video_track_{helper.gen_unique_id()}"
# 设置 relative_index=10 确保图片轨道在主视频轨道之上,避免与主轨道冲突
script.add_track(track_type=TrackType.video, track_name=track_name, relative_index=10)
add_image_to_draft(script, track_name, "", image_items[0])
if not image_items:
logger.error("No image items parsed")
return False
# 4. 添加图片轨道
track_name = f"image_track_{helper.gen_unique_id()}"
script.add_track(track_type=TrackType.video, track_name=track_name, relative_index=10)
logger.info(f"Added image track: {track_name}")
# 5. 添加图片到轨道(传递正确的图片资源目录)
add_image_to_draft(script, track_name, draft_image_dir, image_items[0])
return True
except Exception as e:
@@ -169,12 +205,18 @@ def add_image_material(script: ScriptFile, img_url: str) -> bool:
return False
def add_audio_material(script: ScriptFile, audio_url: str) -> bool:
def add_audio_material(script: ScriptFile, draft_id: str, audio_url: str) -> bool:
"""
添加音频素材到草稿(固定5秒时长)
与add_audios接口保持一致的处理方式:
1. 创建规范的音频资源目录
2. 使用parse_audio_data解析音频信息
3. 调用add_audio_to_draft添加音频
Args:
script: 草稿文件对象
draft_id: 草稿ID
audio_url: 音频文件URL
Returns:
@@ -183,7 +225,13 @@ def add_audio_material(script: ScriptFile, audio_url: str) -> bool:
try:
logger.info(f"Adding audio material: {audio_url}")
# 构造音频信息JSON(固定5秒时长)
# 1. 创建音频资源目录(与add_audios保持一致)
draft_dir = os.path.join(config.DRAFT_DIR, draft_id)
draft_audio_dir = os.path.join(draft_dir, "assets", "audios")
os.makedirs(name=draft_audio_dir, exist_ok=True)
logger.info(f"Created audio directory: {draft_audio_dir}")
# 2. 构造音频信息JSON(固定5秒时长)
audio_infos = json.dumps([{
"audio_url": audio_url,
"start": 0,
@@ -191,14 +239,20 @@ def add_audio_material(script: ScriptFile, audio_url: str) -> bool:
"volume": 1.0
}])
# 直接使用草稿对象添加音频轨道和片段
# 3. 解析音频信息
from src.service.add_audios import parse_audio_data, add_audio_to_draft
audio_items = parse_audio_data(audio_infos)
if audio_items:
track_name = f"audio_track_{helper.gen_unique_id()}"
# 设置 relative_index=10 确保音频轨道在主音频轨道之上,避免与主轨道冲突
script.add_track(track_type=TrackType.audio, track_name=track_name, relative_index=10)
add_audio_to_draft(script, track_name, "", audio_items[0])
if not audio_items:
logger.error("No audio items parsed")
return False
# 4. 添加音频轨道
track_name = f"audio_track_{helper.gen_unique_id()}"
script.add_track(track_type=TrackType.audio, track_name=track_name, relative_index=10)
logger.info(f"Added audio track: {track_name}")
# 5. 添加音频到轨道(传递正确的音频资源目录)
add_audio_to_draft(script, track_name, draft_audio_dir, audio_items[0])
return True
except Exception as e: