ffmpeg 默认音频编解码器而不是使用 acodec 选项指定它

ffmpeg default audio codec instead of specifying it with acodec option

在 raspberry pi 中,我关注 i2s 麦克风分线板并按照指南建议的方式使用它。当我尝试使用 ffmpeg 将音频从它录制到带有 ffmpeg -f alsa -i dmic_sv out.wav 命令的文件时。我会收到以下错误

[alsa @ 0x22e21c0] cannot set sample format 0x10000 2 (Invalid argument)
dmic_sv: Input/output error

当我使用 -acodec 明确指定使用的编解码器时,它工作正常:

ffmpeg -f alsa -acodec pcm_s32le -i dmic_sv out.wav

并且 ffmpeg 的输出将重新编码为 pcm_s16le

Input #0, alsa, from 'dmic_sv':
  Duration: N/A, start: 1597597938.887969, bitrate: 3072 kb/s
    Stream #0:0: Audio: pcm_s32le, 48000 Hz, stereo, s32, 3072 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s32le (native) -> pcm_s16le (native))

如何在不明确指定的情况下告诉 ffmpeg 默认使用带符号的 32 位小端字节序? ffmpeg 在哪里获得这个默认值,我可以以某种方式配置它吗?

我通过阅读 ffmpeg 源代码自己弄明白了这一点。似乎没有指定编解码器并且使用了 alsa 设备。 FFmpeg 将默认为 pcm 16 位样本。设置默认值的代码 here and the default macro here.