【ffmpeg-go】在golang中调用ffmpeg-go进行视频、音频分析

引入ffmpeg进行视频转音频/音频格式转换。

环境初始化

安装ffmpeg,linux下:apt-get install -y ffmpeg

确认ffmpeg命令可执行后获取ffmpeg-go包。

docker内使用的话,可以在操作系统基础镜像下安装ffmpeg再运行程序,或者源码编译。ffmpeg有很多动态库依赖,直接安装方便些…

代码示例

1. 音频格式转换

ffmpeg命令执行如下:

ffmpeg -i input.mp3 -ar 16000 -ac 1 -y output.wav

上述命令指定了输入文件为input.mp3,输出采样率为16kHz,单声道的文件output.wav。

对应的go代码如下

err = ffmpeg.
	Input("input.mp3").
	Output("output.wav", ffmpeg.KwArgs{
			"ar":  fmt.Sprintf("%d", dstSamplerate), // 设置目标采样率
			"ac":  fmt.Sprintf("%d", dstChannels),   // 设置目标声道数
			"y":   "",                                // 允许覆盖输出文件
		}).ErrorToStdOut().Run()

💡推荐调用ErrorToStdOut()函数,会在终端输出执行日志,便于排查问题。

如果使用的是文件流,可以采用以下代码

	// 使用 ffmpeg 处理输入流
	err = ffmpeg.
		Input("pipe:", ffmpeg.KwArgs{"format": fileExt[1:]}).
		WithInput(file).							//文件输入流
		Output("pipe:", ffmpeg.KwArgs{
			"format":"wav",
			"ar":  fmt.Sprintf("%d", dstSamplerate), // 设置目标采样率
			"ac":  fmt.Sprintf("%d", dstChannels),   // 设置目标声道数
			"y":   "",                                // 允许覆盖输出文件
		}).
		WithOutput(writer).       						//文件输出流
		ErrorToStdOut().
		Run()

"pipe:"参数表明从管道中读取数据,WithInput、WithOutput指定文件流

2.视频提取音频

ffmpeg命令执行如下:

ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 -y output.wav

-vn 标识不处理视频,

-acodec指明声音的编解码器,上述命令指定使用16位有符号整数且采用小端字节序的 PCM 音频格式

go代码如下:

// 使用 ffmpeg 提取音频
	err = ffmpeg.
		Input(inputFile.Name(), ffmpeg.KwArgs{
			// "format": fileExt[1:],
			"analyzeduration": "100M",     //分析持续时间
            "probesize":     "100M",		//分析数据大小
			"fflags":          "+genpts", //生成缺失的时间戳
		}).
		Output(outputFile.Name(), 
		ffmpeg.KwArgs{
			"vn": "",								//忽略视频
			"acodec": "pcm_s16le",					//设置音频编码格式
			"ar":  fmt.Sprintf("%d", dstSamplerate), // 设置目标采样率
			"ac":  fmt.Sprintf("%d", dstChannels),   // 设置目标声道数
			"y":   "",                                // 允许覆盖输出文件
		}).ErrorToStdOut().Run()
		```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值