【Golang】ffmpeg获取音视频文件的时长
// 获取音频时长,结果为秒
func GetWavDuration(filePath string) float64 {
// 格式转换 ffmpeg -i xxxx 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
cmd := fmt.Sprintf("ffmpeg -i %s 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//", filePath)
command := exec.Command("/bin/bash", "-c", cmd)
res, err := command.CombinedOutput()
log.Infof("执行命令: %v, %s", cmd, string(res))
if err != nil {
log.Error("获取时长异常", filePath)
return 0
}
body := string(res)
if !strings.Contains(body, constant.StringColo) {
return 0
}
timeArr := strings.Split(body, constant.StringColo)
if len(timeArr) != 3 {
return 0
}
// 计算时长,转为秒
hour, err := strconv.ParseFloat(timeArr[0], 32)
if err != nil {
return 0
}
min, err := strconv.ParseFloat(timeArr[1], 32)
if err != nil {
return 0
}
second, err := strconv.ParseFloat(timeArr[2], 32)
if err != nil {
return 0
}
return 3600*hour + 60*min + second
}