【发布时间】:2012-08-12 18:00:31
【问题描述】:
我可以将wav文件转换为pcm
ffmpeg -i file.wav -f s16le -acodec pcm_s16le file.pcm
如何恢复此操作?
【问题讨论】:
-
你应该可以使用-acodec 复制吧?
我可以将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 位 little endian 样本-ar 44.1k … 采样率 44.1kHz-ac 2 ... 2 声道(立体声)-i file.pcm … 输入文件file.wav … 输出文件【讨论】:
ffmpeg -i file.wav file.pcm 就可以了,因为进行转换所需的所有信息都在 wav 文件的标题中。
ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav
【讨论】:
注意 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
【讨论】: