我可以将wav文件转换为pcm格式
ffmpeg -i file.wav -f s16le -acodec pcm_s16le file.pcm
我该如何撤销这个操作?
wav容器只是为原始PCM数据添加了一个简单的头部,包括格式、采样率和通道数。由于原始PCM数据不包括这些信息,因此您需要在命令行上指定它们。选项在应用于文件之前指定,因此输入文件之前的选项可以用于指定输入文件的格式,输入文件之后和输出文件之前的选项可以用于指定所需的输出文件格式。如果您想要输出文件中相同的比特/样本、采样率和通道数,则不需要在此情况下使用任何输出选项;wav容器格式已经通过文件扩展名指示。
将原始PCM转换为WAV的示例:
ffmpeg -f s16le -ar 44.1k -ac 2 -i file.pcm file.wav
-f s16le
… 表示采样数据为有符号的16位小端字节序-ar 44.1k
… 表示采样率为44.1kHz-ac 2
… 表示音频通道数为2(立体声)-i file.pcm
… 表示输入文件为file.pcmfile.wav
… 表示输出文件为file.wavffmpeg -i file.wav file.pcm
就可以了,因为进行转换所需的所有信息都在WAV文件头中。 - neevek注意RAW数据格式
-f u8代表无符号8位,s16为有符号,以防其他情况
$ ffmpeg -formats | grep PCM
DE alaw PCM A-law
DE f32be PCM 32-bit floating-point big-endian
DE f32le PCM 32-bit floating-point little-endian
DE f64be PCM 64-bit floating-point big-endian
DE f64le PCM 64-bit floating-point little-endian
DE mulaw PCM mu-law
DE s16be PCM signed 16-bit big-endian
DE s16le PCM signed 16-bit little-endian
DE s24be PCM signed 24-bit big-endian
DE s24le PCM signed 24-bit little-endian
DE s32be PCM signed 32-bit big-endian
DE s32le PCM signed 32-bit little-endian
DE s8 PCM signed 8-bit
DE u16be PCM unsigned 16-bit big-endian
DE u16le PCM unsigned 16-bit little-endian
DE u24be PCM unsigned 24-bit big-endian
DE u24le PCM unsigned 24-bit little-endian
DE u32be PCM unsigned 32-bit big-endian
DE u32le PCM unsigned 32-bit little-endian
DE u8 PCM unsigned 8-bit
ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav
以下代码应该可以正常工作:
ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav