first commit

This commit is contained in:
Yangtao
2025-11-18 17:48:20 +08:00
commit 6e56cab848
196 changed files with 65809 additions and 0 deletions

85
pkg/helper/QiNiuHelper.go Normal file
View File

@ -0,0 +1,85 @@
package helper
import (
"encoding/base64"
"fmt"
"strings"
"github.com/anxpp/beego/logs"
"github.com/qiniu/go-sdk/v7/auth"
"github.com/qiniu/go-sdk/v7/storage"
"github.com/spf13/viper"
)
//{"id":"z0.0A2234420A3600F3365DD1FA282B440D","pipeline":"1381904061.XZVideoToImagesQueue","code":0,
// "desc":"The fop was completed successfully","reqid":"Ry0AAMB45er_HtgV","inputBucket":"media","inputKey":"shot/xingzuan_appstore_video.mp4_000001.jpg",
// "items":[{"cmd":"animate/duration/5/merge/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDAyLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDAzLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA0LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA1LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA2LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA3LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA4LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDA5LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDEwLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDExLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDEyLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDEzLmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE0LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE1LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE2LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE3LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE4LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDE5LmpwZw==/key/c2hvdC94aW5nenVhbl9hcHBzdG9yZV92aWRlby5tcDRfMDAwMDIwLmpwZw==/effect/0",
// "code":0,"desc":"The fop was completed successfully","hash":"lmW7N4-x40al165ufZj2SJGbut6L","key":"-KqubldLD_opMcwnpcOJ2FOml7M=/Ftq7oAVtIsQ-hOdz1amflU4f0mxO","returnOld":0}]}
type QiNiuVideoToImagesParam struct {
Id string `json:"id"`
Pipeline string `json:"pipeline"`
Code int `json:"code"`
Desc string `json:"desc"`
Reqid string `json:"reqid"`
InputBucket string `json:"inputBucket"`
InputKey string `json:"inputKey"`
Items []QiNiuVideoToImagesParamItem `json:"items"`
}
type QiNiuVideoToImagesParamItem struct {
Cmd string `json:"cmd"`
Code int `json:"code"`
Desc string `json:"desc"`
Keys []string `json:"keys"`
Key string `json:"key"`
Hash string `json:"hash"`
ReturnOld int `json:"returnOld"`
}
// 获取视频抽帧的token
// 第2秒开始每秒10张抽20张
func QiNiuVideoToImages(key string) (persistentId string) {
mac := auth.New(viper.GetString("qiniu.key"), viper.GetString("qiniu.secret"))
cfg := storage.Config{UseHTTPS: true}
operationManager := storage.NewOperationManager(mac, &cfg)
saveBucket := "dddjmedia"
// 处理指令集合
// vsample/<Format>/ss/<StartTime>/t/<Duration>/s/<Resolution>/rotate/<Degree>/interval/<Interval>/pattern/<Pattern>
// /ss/<StartTime> 是 指定截取视频的开始时刻,单位:秒,精度为 100ms。例如 /ss/1.1
// /t/<Duration> 是 采样总时长,单位:秒,精度为 100ms。例如 t/1.1
// /s/<Resolution> 缩略图分辨率单位像素px格式<Width>x<Height>宽度取值范围为1-1920高度取值范围为1-1080。 默认为原始视频分辨率。
// /rotate/<Degree> 指定顺时针旋转的度数可取值为90、180、270、auto。 默认为不旋转。
// /interval/<Interval> 指定采样间隔,单元:秒。 默认为5秒,精度为 100ms例如/interval/0.1
// /pattern/<Pattern> 是 指定各张截图的资源名格式,支持如下魔法变量: $(count) :六个占位符的数字串,不足位的填充前导零即%06d如 000001
fopVSample := fmt.Sprintf("vsample/png/ss/2/t/2/interval/0.1/pattern/%s", base64.URLEncoding.EncodeToString([]byte("shot/"+key+"_$(count).jpg")))
fopBatch := []string{fopVSample}
fops := strings.Join(fopBatch, ";")
persistentId, err := operationManager.Pfop(saveBucket, key, fops, "FYVideoToImagesQueue", viper.GetString("open.notify.qiniuVideoShot"), true)
if err != nil {
logs.Error(err.Error(), " ", persistentId, "", key)
}
return persistentId
}
func QiNiuImagesToGif(keys []string) (persistentId string) {
mac := auth.New(viper.GetString("qiniu.key"), viper.GetString("qiniu.secret"))
cfg := storage.Config{UseHTTPS: true}
operationManager := storage.NewOperationManager(mac, &cfg)
saveBucket := "dddjmedia"
an := "animate/duration/5/merge"
for i := 1; i < len(keys); i++ {
an += "/key/" + base64.URLEncoding.EncodeToString([]byte(keys[i]))
}
an += "/effect/0"
logs.Info("result of img merge", an)
fopBatch := []string{an}
fops := strings.Join(fopBatch, ";")
persistentId, err := operationManager.Pfop(saveBucket, keys[0], fops, "FYVideoToImagesQueue", viper.GetString("open.notify.qiniuImgMergeShot"), true)
if err != nil {
fmt.Println(err)
logs.Error(err.Error())
}
return persistentId
}