NarratoAI/app/services/test_multi_video_script_sources_unittest.py
viccy 342fc15f3b feat(tts,search,video): 新增OmniVoice TTS、联网搜索与多视频剪辑支持
新增OmniVoice语音合成引擎全流程支持,包含配置项、WebUI界面与服务实现
集成Tavily联网搜索能力,支持短剧剧情分析前自动检索剧情背景信息
新增多视频源剪辑支持,完善脚本校验规则并重构剪辑逻辑适配多视频路径
重构LLM剧情分析Prompt,优化输出格式适配多场景与联网检索结果
调整streamlit版本至1.56.0修复兼容性问题
新增相关单元测试与多语言翻译,更新配置示例文件
2026-06-07 01:24:32 +08:00

85 lines
2.9 KiB
Python

import json
import os
import tempfile
import unittest
from unittest import mock
from app.services import clip_video
from app.utils import check_script
class TestMultiVideoScriptSources(unittest.TestCase):
def test_check_format_accepts_optional_video_source_fields(self):
script = [
{
"_id": 1,
"video_id": 2,
"video_name": "2.mp4",
"timestamp": "00:00:00,000-00:00:03,000",
"picture": "画面",
"narration": "解说",
"OST": 0,
}
]
result = check_script.check_format(json.dumps(script, ensure_ascii=False))
self.assertTrue(result["success"])
def test_clip_video_unified_resolves_source_by_video_id_and_name(self):
with tempfile.TemporaryDirectory() as temp_dir:
video_1 = os.path.join(temp_dir, "1.mp4")
video_2 = os.path.join(temp_dir, "2.mp4")
for video_path in [video_1, video_2]:
with open(video_path, "wb") as file:
file.write(b"video")
output_dir = os.path.join(temp_dir, "clips")
used_sources = []
def fake_process(source_video_path, script_item, output_dir_arg, *_args):
used_sources.append(source_video_path)
output_path = os.path.join(output_dir_arg, f"{script_item['_id']}.mp4")
with open(output_path, "wb") as file:
file.write(b"clip")
return output_path
script_list = [
{
"_id": 1,
"video_id": 2,
"timestamp": "00:00:00,000-00:00:03,000",
"picture": "视频2画面",
"narration": "播放原片1",
"OST": 1,
},
{
"_id": 2,
"video_name": "1.mp4",
"timestamp": "00:00:03,000-00:00:06,000",
"picture": "视频1画面",
"narration": "播放原片2",
"OST": 1,
},
]
with (
mock.patch.object(clip_video, "check_hardware_acceleration", return_value=None),
mock.patch.object(clip_video, "_process_original_audio_segment", side_effect=fake_process),
):
result = clip_video.clip_video_unified(
video_origin_path=video_1,
video_origin_paths=[video_1, video_2],
script_list=script_list,
tts_results=[],
output_dir=output_dir,
task_id="multi-video-test",
)
self.assertEqual([video_2, video_1], used_sources)
self.assertEqual({1, 2}, set(result.keys()))
if __name__ == "__main__":
unittest.main()