【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
}

你可能感兴趣的:(后端,golang,开发语言)