Spaces:
Running
Running
File size: 1,803 Bytes
3b13b0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import os
from uuid import uuid4
from loguru import logger
from typing import Dict, List, Optional, Tuple
from app.services import material
class VideoService:
@staticmethod
async def crop_video(
video_path: str,
video_script: List[dict]
) -> Tuple[str, Dict[str, str]]:
"""
裁剪视频服务
Args:
video_path: 视频文件路径
video_script: 视频脚本列表
Returns:
Tuple[str, Dict[str, str]]: (task_id, 裁剪后的视频片段字典)
视频片段字典格式: {timestamp: video_path}
"""
try:
task_id = str(uuid4())
# 从脚本中提取时间戳列表
time_list = [scene['timestamp'] for scene in video_script]
# 调用裁剪服务
subclip_videos = material.clip_videos(
task_id=task_id,
timestamp_terms=time_list,
origin_video=video_path
)
if subclip_videos is None:
raise ValueError("裁剪视频失败")
# 更新脚本中的视频路径
for scene in video_script:
try:
scene['path'] = subclip_videos[scene['timestamp']]
except KeyError as err:
logger.error(f"更新视频路径失败: {err}")
logger.debug(f"裁剪视频成功,共生成 {len(time_list)} 个视频片段")
logger.debug(f"视频片段路径: {subclip_videos}")
return task_id, subclip_videos
except Exception as e:
logger.exception("裁剪视频失败")
raise |