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

问题描述

在树莓派中,我遵循i2s麦克风分线板,并按照建议的指南使用它。当我尝试使用ffmpeg -f alsa -i dmic_sv out.wav命令将使用ffmpeg的音频记录到文件中时。我会收到以下错误

[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位Little Endian,而无需明确指定? ffmpeg在哪里获得该认值,我可以以某种方式对其进行配置吗?

解决方法

我通过阅读ffmpeg源代码自己弄清楚了这一点。似乎未指定编解码器且使用了alsa设备。 FFmpeg将默认使用pcm 16位样本。设置默认here和默认宏here的代码。