C# 如何使用ffmpeg将常规WAV文件转换为4位WAV文件?

C# 如何使用ffmpeg将常规WAV文件转换为4位WAV文件?,c#,audio,ffmpeg,C#,Audio,Ffmpeg,我试过一些类似的方法 C:\ffmpeg\ffmpeg-i“Blip\u Select2.wav”-C:a wav-sample\u fmt u8“Blip\u Select2\u 8bit.wav” 但我不知道如何访问4位转换 我正在为一个c#项目使用音频,4位就足够了,我更喜欢wav,这样我就不必为我的文件分发可能受限使用的解码器 编辑。我已经找到了一个使用不同软件的解决方案(见下面我的答案),但我接受了Mattias的答案,因为他按照要求提供了解决方案,使用ffmpeg。好的,所以我确实找

我试过一些类似的方法

C:\ffmpeg\ffmpeg-i“Blip\u Select2.wav”-C:a wav-sample\u fmt u8“Blip\u Select2\u 8bit.wav”

但我不知道如何访问4位转换

我正在为一个c#项目使用音频,4位就足够了,我更喜欢wav,这样我就不必为我的文件分发可能受限使用的解码器


编辑。我已经找到了一个使用不同软件的解决方案(见下面我的答案),但我接受了Mattias的答案,因为他按照要求提供了解决方案,使用ffmpeg。

好的,所以我确实找到了解决方案。它是一个很棒的命令行实用程序,类似于ffmpeg,称为(声音交换)SoX。可以在这里找到:

实现转换为4位wav的命令行如下:

sox "sound.wav" -b 4 "sound_4bit.wav"
它工作得很好,我没有注意到任何质量下降,因为采样率仍然是44100,而大小下降到1/4


一个重要的音符。只有当您的音频干净且录制的声音不太响亮时(例如正确录制的语音语音(这就是我使用它的目的),此功能才能正常工作,但只要声音不太响亮,此功能也适用于音乐。

请注意,sox的
-B4
似乎使用MS ADPCM编解码器,它使用4位编码样本之间的差异。如果要使用ffmpeg生成类似的结果,可以使用:

ffmpeg-i sound.wav-编解码器:adpcm_ms-f wav sound_4bit.wav

没问题。同样让我困惑的是,也许wav文件每个规范可以有“原始”4位样本,但我想很少有实现支持它是的,的确如此。虽然我最终发现,如果没有额外的编解码器,我无法在C#中真正使用4位wav文件,因为它们无法真正识别。真遗憾。对于许多语音/语音应用程序来说,4位44.100的质量已经足够了,使用4位而不是8位可以立即将大小减半,而不会造成损失。啊:(不想依赖任何额外的编解码器?对于语音,我可能会考虑使用speex或opus作为免费的替代方案