添加视频帧提取功能和阿里云OSS存储支持
- 新增从视频素材提取首帧/尾帧的功能,支持画面连续性编辑 - 添加阿里云OSS存储支持,可配置本地或OSS存储方式 - 导入视频素材时自动探测并更新视频时长信息 - 前端添加从素材提取尾帧的UI界面 - 添加FramePrompt模型的数据库迁移 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@ type AssetHandler struct {
|
||||
|
||||
func NewAssetHandler(db *gorm.DB, cfg *config.Config, log *logger.Logger) *AssetHandler {
|
||||
return &AssetHandler{
|
||||
assetService: services.NewAssetService(db, log),
|
||||
assetService: services.NewAssetService(db, log, cfg),
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
@@ -218,3 +218,27 @@ func (h *AssetHandler) ImportFromVideoGen(c *gin.Context) {
|
||||
|
||||
response.Success(c, asset)
|
||||
}
|
||||
|
||||
// ExtractFrame 从视频素材中提取帧
|
||||
func (h *AssetHandler) ExtractFrame(c *gin.Context) {
|
||||
assetID, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||||
if err != nil {
|
||||
response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
|
||||
var req services.ExtractFrameRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.BadRequest(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
imageGen, err := h.assetService.ExtractFrameFromAsset(uint(assetID), &req)
|
||||
if err != nil {
|
||||
h.log.Errorw("Failed to extract frame", "error", err, "asset_id", assetID)
|
||||
response.InternalError(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, imageGen)
|
||||
}
|
||||
|
||||
@@ -180,6 +180,7 @@ func SetupRouter(cfg *config.Config, db *gorm.DB, log *logger.Logger, localStora
|
||||
assets.DELETE("/:id", assetHandler.DeleteAsset)
|
||||
assets.POST("/import/image/:image_gen_id", assetHandler.ImportFromImageGen)
|
||||
assets.POST("/import/video/:video_gen_id", assetHandler.ImportFromVideoGen)
|
||||
assets.POST("/:id/extract-frame", assetHandler.ExtractFrame)
|
||||
}
|
||||
|
||||
storyboards := api.Group("/storyboards")
|
||||
|
||||
Reference in New Issue
Block a user