ffmpeg 无需转换即可提取通道

ffmpeg 无需转换即可提取通道

我正在使用以下 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”,但两个参数都无法识别。

如何在不改变位深度的情况下提取多 wav 文件的通道?

答案1

编码器 pcm_s16le 用于您的.wav输出。此编码器仅支持 s16 样本格式(请参阅ffmpeg -h encoder=pcm_s16leffmpeg -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

相关内容