Может ли ffmpeg конвертировать аудио из raw PCM в WAV?

Я могу конвертировать wav-файл в pcm

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

Как я могу отменить эту операцию?

4 ответов


контейнер wav просто добавляет простой заголовок к необработанным данным PCM. Заголовок включает формат, частоту дискретизации и количество каналов. Поскольку необработанные данные PCM не включают эту информацию, ее необходимо указать в командной строке. Параметры задаются перед файлом, к которому они применяются, поэтому параметры перед входным файлом могут использоваться для указания формата входного файла, а параметры после входного файла и перед выходным файлом могут использоваться для указания желаемого формата выходной файл. Если вам нужны те же бит/образец, частота дискретизации и количество каналов в выходном файле, то в этом случае вам не нужны никакие параметры вывода; формат контейнера wav уже указан расширением файла.

пример преобразования raw PCM в WAV:

ffmpeg -f s16le -ar 44.1k -ac 2 -i file.pcm file.wav
  • -f s16le ... 16-разрядный маленькие образцы прямым
  • -ar 44.1k ... частота дискретизации 44,1 кГц
  • -ac 2 ... 2 канала (стерео)
  • -i file.pcm ... входного файла
  • file.wav ... выходной файл

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

будьте осторожны с форматом необработанных данных

- 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