package video import "github.com/gogf/gf/v2/frame/g" // ---------- 场景检测+视频分割(异步)---------- // SceneSplitReq 场景检测+视频分割请求 type SceneSplitReq struct { g.Meta `path:"/scene-split" method:"post" tags:"场景分割" summary:"场景检测并分割视频(异步)" dc:"下载视频,基于PySceneDetect检测场景变化并分割成多个视频片段,同时提取音频,全部上传到MinIO后回调通知"` VideoURL string `json:"videoUrl" v:"required#视频URL不能为空" dc:"视频URL地址"` Threshold float64 `json:"threshold" dc:"场景检测阈值(默认27),越小越敏感、场景切割越多" d:"27.0"` CallbackURL string `json:"callbackUrl" dc:"回调地址,处理完成后POST结果到该地址(可选)"` } // CreateSceneSplitTaskRes 创建场景分割任务响应 type CreateSceneSplitTaskRes struct { TaskID string `json:"taskId" dc:"任务ID"` } // GetSceneSplitTaskReq 查询场景分割任务请求 type GetSceneSplitTaskReq struct { g.Meta `path:"/scene-split/task/{taskId}" method:"get" tags:"场景分割" summary:"查询场景分割任务结果" dc:"根据taskId查询异步场景分割任务结果"` TaskID string `json:"taskId" dc:"任务ID"` } // SegmentEntry 单个分片信息(按时间线排列) type SegmentEntry struct { Timeline string `json:"timeline" dc:"时间线标识,如 0.0-7.2"` URL string `json:"url" dc:"分片MinIO地址"` } // GetSceneSplitTaskRes 查询场景分割任务响应 type GetSceneSplitTaskRes struct { TaskID string `json:"taskId" dc:"任务ID"` Status string `json:"status" dc:"状态: pending/running/success/failed"` AudioURL string `json:"audioUrl,omitempty" dc:"提取的音频MinIO地址"` Segments []SegmentEntry `json:"segments,omitempty" dc:"按时间线排列的视频分片列表"` SceneCount int `json:"sceneCount" dc:"检测到的场景数/分片数"` AudioDuration float64 `json:"audioDuration,omitempty" dc:"音频时长(秒)"` VideoDuration float64 `json:"videoDuration,omitempty" dc:"视频总时长(秒)"` ErrorMessage string `json:"errorMessage,omitempty" dc:"错误信息"` CreatedAt int64 `json:"createdAt" dc:"创建时间戳"` }