ffmpeg(使用版本2.8.1)输出的包含高于48000的采样率(例如88200或96000)的任何wav文件的格式代码似乎将具有WAV_FORMAT_EXTENSIBLE格式而不是WAV_FORMAT_PCM。即使它是具有16位深度的2通道源,或者使用-ac 2 -acodec pcm_s16le
强制执行这些设置。
为什么ffmpeg这样做?是否有任何命令行选项强制WAV_FORMAT_PCM被写为格式,无论采样率如何?重新采样太慢了。如果没有可用的命令行选项,我在哪里可以开始查看源代码?
答案 0 :(得分:1)
我无法找到任何参考原因,也许它并不常见。 MSDN页面仅提及多个频道和高分辨率。
相关代码位于libavformat/riffenc.c:
waveformatextensible = (enc->channels > 2 && enc->channel_layout) ||
enc->sample_rate > 48000 ||
enc->codec_id == AV_CODEC_ID_EAC3 ||
av_get_bits_per_sample(enc->codec_id) > 16;