依赖库
github.com/u2takey/ffmpeg-go
实现代码
package main
import (
"fmt"
"github.com/gofrs/uuid"
"github.com/google/logger"
ffmpeg "github.com/u2takey/ffmpeg-go"
"path/filepath"
"strings"
)
func InFormat1(target string, str_array []string) bool {
for _, element := range str_array {
if target == element {
return true
}
}
return false
}
//提取MP3
func ExtractMp3(inputVideoPath, outputDir string) string {
_formatArr := []string{"mp4", "flv"}
_, _file := filepath.Split(inputVideoPath)
_tmps := strings.Split(_file, ".")
_ext := _tmps[len(_tmps)-1]
if !InFormat1(_ext, _formatArr) {
logger.Fatal("格式不支持")
}
_name, err := uuid.NewV4()
if err != nil {
logger.Fatal(err)
}
_resultVideoPath := filepath.Join(outputDir, fmt.Sprintf("%s.%s", _name.String(), "mp3"))
err = ffmpeg.Input(inputVideoPath).
Output(_resultVideoPath, ffmpeg.KwArgs{"acodec": "libmp3lame"}).
OverWriteOutput().ErrorToStdOut().Run()
if err != nil {
logger.Fatal(err)
}
return _resultVideoPath
}
func main() {
_extractMp3 := ExtractMp3("./3333333.mp4", "./Desktop")
fmt.Println(_extractMp3)
}
日志工具类代码
package logutil
import (
"github.com/google/logger"
"os"
)
var pLogger *logger.Logger
// Init init logger
func Init(verbose, systemLog bool, logPath string) {
file, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
if err != nil {
logger.Fatalf("logger Init: open log file(%v) error(%v)", logPath, err)
}
pLogger = logger.Init("FFmpegDemoLogger", verbose, systemLog, file)
}
// Close close logger
func Close() {
pLogger.Close()
}
代码说明
1、ExtractMp3方法参数分别为,输入视频地址、输出mp3目录地址值。
2、做了简单的视频格式校验,如需添加,可以自己看着来。
3、最终视频名使用uuid避免重复。