gpt4 book ai didi

c++ - 从原始 pcm 到 OGG Vorbis 的 libav 音频编码示例

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:55 25 4
gpt4 key购买 nike

我目前正在开发一种工具,可以将多种专有格式的游戏媒体 Assets 转换为更开放的格式。我正在尝试使用 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. 解码帧中每个 channel 有多少样本。

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

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

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

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

关于c++ - 从原始 pcm 到 OGG Vorbis 的 libav 音频编码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com