libav音频编码从原始pcm到OGG Vorbis的例子

Example of libav audio encoding from raw pcm to OGG Vorbis

本文关键字:Vorbis OGG pcm 音频 编码 原始 libav      更新时间:2023-10-16

我目前正在开发一种工具,可以将多种专有格式的游戏媒体资产转换为更开放的格式。我试图使用libav库http://libav.org/从WAV,mp3等格式解码为原始pcm std::vector<char>(成功完成),然后将其编码为ogg vorbis。我正试图在文档中使用api-example.c。https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decoding_encoding.c但是没有什么进展,因为我被困在哪里的音调生成结束和AVPacket编码开始。

是否有人指出我从原始pcm文件(或std::vector)写入文件(最好是ogg vorbis)的音频编码的工作示例?

在使用libav:

编码音频时需要记住的几件事
  1. 解码帧的pcm样本格式是什么?AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP等)

  2. 解码帧中每个通道有多少采样。

  3. 每个音频编码器只采用一种特定类型的样本格式,所以如果pcm样本格式与编码器的样本格式不相同,则必须进行样本格式转换。

  4. 每个音频编码器采用一个特定的no。帧中每个通道的采样。

    。MP3每个通道需要1152个采样,aac-main/lc每个通道需要1024个采样。aac-每个通道需要2048个采样。所以你需要做一些缓冲来提供预期的no。

为了进行示例格式转换,我建议您使用Swr_convert API