[ffmpeg][goav]ffmpeg代码例子pcmu重采样并转码aac格式

本文介绍了一个使用Go语言实现的8k双声道PCMU格式音频重采样至44.1kHz并转码为AAC格式的例子。通过解析和处理音频文件,利用avfilter进行重采样和格式转换,最终将AAC数据写入输出文件。

8k双声道的pcmu格式重采样44.1kHz并转码aac格式例子
src : 其中adts包是给aac填充头部的,这里就没给了。

package main

import(
	"github.com/ailumiyana/goav-incr/goav/avcodec"
	"github.com/ailumiyana/goav-incr/goav/avutil"
	"github.com/ailumiyana/goav-incr/goav/avfilter"

	"unsafe"
	"os"
	"io/ioutil"
	"log"
	"strconv"

	"adts"
)

func main() {
   
   
	avutil.AvLogSetLevel(avutil.AV_LOG_TRACE)

	//decoder
	pkt 		   := avcodec.AvPacketAlloc()
	if pkt == nil {
   
   
		log.Panic("AvPacketAlloc failed.")
	}

	codec 		   := avcodec.AvcodecFindDecoder(avcodec.CodecId(avcodec.AV_CODEC_ID_PCM_MULAW))
	if codec == nil {
   
   
		log.Panic("AvcodecFindDecoder failed.")
	}

	context 	   := codec.AvcodecAllocContext3()
	if context == nil {
   
   
		log.Panic("AvcodecAllocContext3 failed.")
	}

	frame   	   := avutil.AvFrameAlloc()
	if frame == nil {
   
   
		log.Panic("AvFrameAlloc failed.")
	}

	//设置通道数
	context.SetAudioDecodeParamsTest(2)
	context.AvcodecOpen2(codec, nil)


	//encoder
	codec_enc 		   := avcodec.AvcodecFindEncoder(avcodec.CodecId(avcodec.AV_CODEC_ID_AAC))
	if codec_enc == nil {
   
   
		log.Panic("AvcodecFindEncoder failed.")
	}

	pkt_enc  		   := avcodec.AvPacketAlloc()
	if pkt_enc == nil {
   
   
		log.Panic("AvPacketAlloc failed.")
	}

	context_enc 	   := codec_enc.AvcodecAllocContext3()
	if context_enc == nil {
   
   
		log.Panic("AvcodecAllocContext3 failed.")
	}

	context_enc.SetAudioEncodeParams(128000, 44100, "stereo", avcodec.AV_SAMPLE_FMT_FLTP)

	err := context_enc.AvcodecOpen2(codec_enc, nil)
	if err < 0 {
   
   
		log.Panic("AvcodecOpen2 failed.")
	}

	//filter

	graph := avfilter.AvfilterGraphAlloc()
	if graph == nil {
   
   
		log.Fatal("AvfilterGraphAlloc Failed.")
	}
	
	inputs  := avfilter.AvfilterInoutAlloc()
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值