【问题标题】:Can ffmpeg convert audio from raw PCM to WAV?ffmpeg 可以将音频从原始 PCM 转换为 WAV 吗?
【发布时间】:2012-08-12 18:00:31
【问题描述】:

我可以将wav文件转换为pcm

ffmpeg -i file.wav -f s16le -acodec pcm_s16le file.pcm

如何恢复此操作?

【问题讨论】:

  • 你应该可以使用-acodec 复制吧?

标签: audio ffmpeg wav pcm


【解决方案1】:

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 … 输出文件

【讨论】:

  • 反向(PCM 到 WAV)操作呢?
  • @mustafa.yavuz:这 PCM-to-WAV-操作。
  • @bos,我猜@mustafa.yavuz 是在问相反的问题(WAV 到 PCM)。然后没什么特别的,只需ffmpeg -i file.wav file.pcm 就可以了,因为进行转换所需的所有信息都在 wav 文件的标题中。
  • 我在 -f 参数上绊倒了。试图使用 ffmpeg -sample_fmts 中的一个值。正确的价值观与巴尼的回答一样。
【解决方案2】:
ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav

【讨论】:

    【解决方案3】:

    注意 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
    

    【讨论】:

      【解决方案4】:

      下面的代码应该可以工作:

      ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav
      

      【讨论】:

      • 此答案与上述@olegog 的答案完全相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2023-03-18
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多