FFmpeg can read various raw audio types (sample formats) and demux or mux them into different containers (formats). For example, you can read and write raw PCM audio into a WAV container. Or convert between raw types.
Raw audio in FFmpeg can take several different "forms", i.e. sample formats. For instance:
smeans "signed" (for the integer representations),
uwould mean "unsigned"
- 16 means 16 Bits per sample
lemeans "little endian" coding for the samples
You can see a list of supported sample formats by inspecting the
ffmpeg -formats output:
$ 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
These represent all the built-in raw audio sample formats.
Reading and Writing Raw Audio
FFmpeg can take input of raw audio types by specifying the type on the command line. For instance, to convert a "raw" audio type to a ".wav" file:
ffmpeg -f s32le input_filename.raw output.wav
You can specify number of channels, etc. as well, ex:
ffmpeg -f u16le -ar 44100 -ac 1 -i input.raw output.wav
The default for muxing into WAV files is
pcm_s16le. You can change it by specifying the audio codec and using the WAV file extension:
ffmpeg -i input -c:a pcm_s32le output.wav
which will create a WAV file containing audio with that codec (not a raw file). There are also other containers that can contain raw audio packets, like
If you want to create a raw file, don't use the WAV format, but the raw one (as seen in the table above), e.g.
s16le, and the appropriate audio codec:
ffmpeg -i input -f s16le -c:a pcm_s16le output.raw
You can determine the format of a file, ex
$ ffmpeg -i Downloads/BabyElephantWalk60.wav ffmpeg version ... ... Input #0, wav, from 'Downloads/BabyElephantWalk60.wav': Duration: 00:01:00.00, bitrate: 352 kb/s Stream #0:0: Audio: pcm_s16le ( / 0x0001), 22050 Hz, mono, s16, 352 kb/s
The pcm_s16le tells you what format your audio is in. And that happens to be a common format.