Я использую следующую команду ffmpeg для преобразования многодорожечного wav-файла в несколько моно-треков:

ffmpeg -i input.wav \
  -map_channel 0.0.0 a.wav \
  -map_channel 0.0.1 b.wav \
  -map_channel 0.0.2 c.wav \
  -map_channel 0.0.3 d.wav \

Это работает нормально, но конвертирует каналы в 16-битную PCM:

...
Stream #0:0 -> #0:0 (pcm_s24le (native) -> pcm_s16le (native))
Stream #0:0 -> #1:0 (pcm_s24le (native) -> pcm_s16le (native))
Stream #0:0 -> #2:0 (pcm_s24le (native) -> pcm_s16le (native))
Stream #0:0 -> #3:0 (pcm_s24le (native) -> pcm_s16le (native))
...

Я также пробовал "-sample_fmt pcm_s24le" или "-sample_fmt s32", но оба параметра не были распознаны.

Как я могу извлечь каналы из мультиволнового файла без изменения битовой глубины?

1 ответ1

2

Кодер pcm_s16le используется для вашего вывода .wav . Этот кодировщик поддерживает только формат образца s16 (см. ffmpeg -h encoder=pcm_s16le и ffmpeg -sample_fmts).

Вы можете выбрать кодировщик pcm_s24le:

ffmpeg -i input.wav \
  -map_channel 0.0.0 -c:a pcm_s24le a.wav \
  -map_channel 0.0.1 -c:a pcm_s24le b.wav \
  -map_channel 0.0.2 -c:a pcm_s24le c.wav \
  -map_channel 0.0.3 -c:a pcm_s24le d.wav

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .