优化视频提炼

This commit is contained in:
Azmat@qq.com
2026-08-27 15:21:48 +08:00
parent 51620bf25b
commit 3fbc2f2dab
7 changed files with 438 additions and 122 deletions
+19 -3
View File
@@ -711,9 +711,10 @@ class VideoDigestView(APIView):
parser_classes = [MultiPartParser, FormParser, JSONParser]
def get(self, request):
from .video_digest import get_inflight_team_digest, list_team_digest_history
from .video_digest import expire_stale_team_digests, get_inflight_team_digest, list_team_digest_history
team = get_current_team(request.user)
expire_stale_team_digests(team=team)
results = list_team_digest_history(team=team)
return Response({
"results": results,
@@ -723,7 +724,8 @@ class VideoDigestView(APIView):
def post(self, request):
upload = request.FILES.get("file") or request.data.get("file")
if upload is None:
reuse_task_id = request.data.get("reuse_task_id") or None
if upload is None and not reuse_task_id:
return Response({"detail": "请先上传参考视频"}, status=status.HTTP_400_BAD_REQUEST)
require_worker_task("apps.ai.tasks.run_video_digest_task")
from .video_digest import VideoDigestError, submit_team_digest
@@ -734,6 +736,7 @@ class VideoDigestView(APIView):
team=team,
user=request.user,
upload=upload,
reuse_task_id=reuse_task_id,
model_config_id=request.data.get("model_config_id") or None,
)
except VideoDigestError as exc:
@@ -745,12 +748,16 @@ class VideoDigestView(APIView):
{"detail": public_error.fallback_message, "error": public_error.as_dict()},
status=status.HTTP_502_BAD_GATEWAY,
)
return Response({"name": getattr(upload, "name", "") or "参考视频", **result}, status=status.HTTP_202_ACCEPTED)
return Response(
{"name": getattr(upload, "name", "") or result.get("file_name") or "参考视频", **result},
status=status.HTTP_202_ACCEPTED,
)
class VideoDigestDetailView(APIView):
"""GET /api/ai/video-digest/<id>/ 轮询提炼任务。
PATCH /api/ai/video-digest/<id>/ 保存编辑后的提示词到这条历史。
DELETE /api/ai/video-digest/<id>/ 取消进行中的提炼并退预留积分。
"""
parser_classes = [JSONParser, FormParser]
@@ -780,6 +787,15 @@ class VideoDigestDetailView(APIView):
return Response({"detail": "记录不存在"}, status=status.HTTP_404_NOT_FOUND)
return Response(item)
def delete(self, request, task_id):
from .video_digest import cancel_team_digest
team = get_current_team(request.user)
item = cancel_team_digest(team=team, task_id=task_id)
if item is None:
return Response({"detail": "记录不存在"}, status=status.HTTP_404_NOT_FOUND)
return Response(item)
class FreeVideoView(APIView):
"""自由创作·视频生成(不绑项目,universal 全能参考 / keyframe 首尾帧)。