package global import ( "crypto/md5" "errors" "fmt" "io/ioutil" "os/exec" "path" "github.com/Mrs4s/go-cqhttp/global/codec" log "github.com/sirupsen/logrus" ) var useSilkCodec = true //InitCodec 初始化Silk编码器 func InitCodec() { log.Info("正在加载silk编码器...") err := codec.Init() if err != nil { log.Error(err) useSilkCodec = false } } //EncoderSilk 将音频编码为Silk func EncoderSilk(data []byte) ([]byte, error) { if !useSilkCodec { return nil, errors.New("no silk encoder") } h := md5.New() _, err := h.Write(data) if err != nil { return nil, err } tempName := fmt.Sprintf("%x", h.Sum(nil)) if silkPath := path.Join("data/cache", tempName+".silk"); PathExists(silkPath) { return ioutil.ReadFile(silkPath) } slk, err := codec.EncodeToSilk(data, tempName, true) if err != nil { return nil, err } return slk, nil } //EncodeMP4 将给定视频文件编码为MP4 func EncodeMP4(src string, target string) error { // -y 覆盖文件 cmd := exec.Command("ffmpeg", "-i", src, "-y", "-c", "copy", "-map", "0", target) return cmd.Run() } //ExtractCover 获取给定视频文件的Cover func ExtractCover(src string, target string) error { cmd := exec.Command("ffmpeg", "-i", src, "-y", "-r", "1", "-f", "image2", target) return cmd.Run() }