【问题标题】:how to decode audio (using ffmpeg - libavcodec) to specific PCM codec如何将音频(使用 ffmpeg - libavcodec)解码为特定的 PCM 编解码器
【发布时间】:2014-10-07 15:10:58
【问题描述】:
我正在做一个需要将 AC3 音频解码为 PCM 编解码器的项目。我正在使用 ffmpeg - libavcodec 来解码这个 AC3 音频,但结果总是在 PCM 签名的 16 位浮点中。因为我需要结果是 PCM 签名的 16 位大端,所以我现在做的是使用 libswscale 将其更改为 PCM 签名的 `16 位小端并将其编码为 PCM 签名的 16 位大端。这在我的情况下是不可接受的,因为我在 CPU 较低的嵌入式 linux 环境中工作。
有什么方法可以直接将音频解码为特定的 PCM 编解码器,我应该设置哪些设置?
非常感谢大家
【问题讨论】:
标签:
linux
audio
ffmpeg
decode
libavcodec
【解决方案1】:
这取决于您使用的 FFmpeg 版本。
从 0.7 版本开始,在 AC3 解码初始化中查看此代码:
/* set scale value for float to int16 conversion */
if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
s->mul_bias = 1.0f;
avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
} else {
s->mul_bias = 32767.0f;
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
}
AC3定点解码
这个新的解码器将 AC3 解码为AV_SAMPLE_FMT_S16P 格式。我不确定在以下情况下如何激活:也许您必须强制解码编解码器,或者可能有一个 .configure 选项(我在源代码中看到很多#if (USE_FIXED))。你可以往这个方向检查。