【问题标题】:Example of libav audio encoding from raw pcm to OGG Vorbis从原始 pcm 到 OGG Vorbis 的 libav 音频编码示例
【发布时间】:2013-01-04 01:19:28
【问题描述】:

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

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

【问题讨论】:

    标签: c++ libavcodec libav libavformat


    【解决方案1】:

    使用 libav 编码音频时需要牢记的几件事:

    1. 解码帧的pcm样本格式是什么(如AV_SAMPLE_FMT_S16、AV_SAMPLE_FMT_FLTP等)

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

    3. 每个音频编码器仅采用特定类型的样本格式,因此如果 pcm 样本格式与编码器的样本格式不同,则必须进行样本格式转换。

    4. 每个音频编码器都有一个特定的编号。帧中每个通道的样本数。

      例如MP3 每个通道需要 1152 个样本,aac-main/lc 每个通道需要 1024 个样本 aac-he 每个通道需要 2048 个样本。所以你必须做一些缓冲才能提供预期的号码。到编码器的样本。

    为了进行示例格式转换,我建议您使用 libswresample 中的 swr_convert api。

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 2020-11-15
      • 2014-04-23
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2020-10-13
      • 2011-07-10
      相关资源
      最近更新 更多