Can ffmpeg convert audio from raw PCM to WAV?

72,203

Solution 1

The wav container just adds a simple header to the raw PCM data. The header includes the format, sample rate, and number of channels. Since the raw PCM data does not include this information, you will need to specify it on the command line. Options are specified before the file they apply to, so options before the input file may be used to specify the format of the input file, and options after the input file and before the output file may be used to specify the desired format of the output file. If you want the same bits/sample, sample rate, and number of channels in the output file then you don't need any output options in this case; the wav container format is already indicated by the file extension.

Example to convert raw PCM to WAV:

ffmpeg -f s16le -ar 44.1k -ac 2 -i file.pcm file.wav
  • -f s16le … signed 16-bit little endian samples
  • -ar 44.1k … sample rate 44.1kHz
  • -ac 2 … 2 channels (stereo)
  • -i file.pcm … input file
  • file.wav … output file

Solution 2

Be careful with RAW data format

-f u8 is unsigned 8 bit, s16 is signed just in case there are others

 $ 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

Solution 3

ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -ac 2 out.wav
Share:
72,203

Related videos on Youtube

xXx_CodeMonkey_xXx
Author by

xXx_CodeMonkey_xXx

Linux, C, C++, Java (Android), Android radio interface layer (RIL), AT commands, pThread, IPC, git, cvs, emacs, gdb, eclipse, Windows must die...

Updated on July 09, 2022

Comments

  • xXx_CodeMonkey_xXx
    xXx_CodeMonkey_xXx almost 2 years

    I can convert wav file to pcm

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

    How can I revert this operation?

    • rogerdpack
      rogerdpack about 10 years
      you should be able to use -acodec copy right?
  • mustafa.yavuz
    mustafa.yavuz almost 11 years
    What about reverse(PCM to WAV) operation?
  • bos
    bos about 8 years
    @mustafa.yavuz: This is the PCM-to-WAV-operation.
  • neevek
    neevek about 8 years
    @bos, I guess @mustafa.yavuz was asking the reverse(WAV to PCM). Then nothing special, simply ffmpeg -i file.wav file.pcm will do since all information needed to do the conversion is in the header of the wav file.
  • M.T
    M.T almost 5 years
    This answer is an identical copy of @olegog's answer above.
  • Pablo H
    Pablo H about 4 years
    I tripped on the -f parameter. Tried to use one value from ffmpeg -sample_fmts. The right values are as on barney's answer.