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()

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

被折叠的 条评论
为什么被折叠?



