使用Golang获取音视频时长信息的示例代码

admin 轻心小站 关注 LV.19 运营
发表于Go语言交流版块 教程

在Go语言中,获取音视频文件的时长信息通常需要依赖于外部库,因为Go标准库本身并不提供直接处理多媒体文件的功能。一个常用的第三方库是ffmpeg,它是一个非常强大的多媒体处理工具,可以通过命令行接口来

在Go语言中,获取音视频文件的时长信息通常需要依赖于外部库,因为Go标准库本身并不提供直接处理多媒体文件的功能。一个常用的第三方库是ffmpeg,它是一个非常强大的多媒体处理工具,可以通过命令行接口来获取音视频时长信息。
下面是一个使用Go语言结合ffmpeg命令行工具来获取视频时长信息的示例代码:

package main

import (
	"bytes"
	"fmt"
	"os/exec"
	"strconv"
)

// 获取视频时长的函数
func getVideoDuration(videoPath string) (duration float64, err error) {
	// 构建ffmpeg命令,用于获取视频时长
	cmd := exec.Command("ffmpeg", "-i", videoPath, "-hide_banner", "-nostats", "-f", "null", "-")
	var stdout bytes.Buffer
	cmd.Stdout = &stdout
	cmd.Stderr = &stdout

	// 运行ffmpeg命令
	err = cmd.Run()
	if err != nil {
		return 0, err
	}

	// 解析ffmpeg输出的时长信息
	output := stdout.String()
	durIndex := outputIndex(output, "Duration:")
	if durIndex == -1 {
		return 0, fmt.Errorf("unable to find duration in ffmpeg output")
	}
	durStr := output[durIndex+len("Duration:"):]
	hhmmssIndex := durStr[:strings.Index(durStr, ",")]
	durFloat, err := strconv.ParseFloat(hhmmssIndex, 64)
	if err != nil {
		return 0, err
	}

	// ffmpeg输出的时长格式为 HH:MM:SS.MICROSECONDS,我们需要将其转换为秒
	// 例如 "00:00:30.000" 应该被转换为 30.000
	return durFloat, nil
}

// 辅助函数,用于在字符串中查找子字符串的起始索引
func outputIndex(s, substr string) int {
	index := s.Find(substr)
	if index == -1 {
		return index
	}
	return index + len(substr)
}

func main() {
	videoPath := "/path/to/your/video.mp4" // 替换为你的视频文件路径
	duration, err := getVideoDuration(videoPath)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Video duration: %.3f seconds\n", duration)
}

在这段代码中,我们定义了一个getVideoDuration函数,它接受一个视频文件路径作为参数,并使用ffmpeg命令行工具来获取视频的时长信息。我们通过解析ffmpeg的输出来提取时长信息,并将其转换为秒作为返回值。

请注意,为了运行上述代码,你需要在你的系统上安装ffmpeg,并确保它可以在命令行中访问。此外,你需要将videoPath变量的值替换为你自己的视频文件路径。

这段代码仅作为一个基本示例,实际应用中可能需要更复杂的错误处理和功能扩展。此外,由于ffmpeg的输出可能因版本和配置的不同而有所变化,所以在不同的环境下可能需要对代码进行适当的调整。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: 使用Golang获取音视频时长信息的示例代码

粉丝

0

关注

0

收藏

0

已有0次打赏