将 arecord 输出转换为 flac

将 arecord 输出转换为 flac

我正在尝试将 arecord wav 输出转换为 flac,它确实可以部分工作:

pi@raspberrypi /tmp $ arecord -d4 -f dat -t wav -r 48000 -c 2 |flac -f -o message.flac - --channels=1 --sample-rate=16000

它将创建一个由 mplayer 识别并作为有效 flac 文件播放的文件:

pi@raspberrypi /tmp $ mplayer message.flac
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 48000 Hz, 2 ch, s16le, 125.8 kbit/8.19% (ratio: 15723->192000)
Selected audio codec: [ffflac] afm: ffmpeg (FFmpeg FLAC audio)
==========================================================================

然而,我不知道如何正确地告诉 flac 我想要一个 16kHz 1 通道轨道作为结果。当我使用 -d 而不是普通的“-”时,它不会接受它。

您可能会问为什么我不将记录通道/速率设置为目标设置 - 答案是,如果我这样做,捕获的声音质量很糟糕,通过具有较低设置的 sox/flac 转换为 flac 效果要好得多。

我最初想使用 sox 来录制 flac,而不必将 wav 重新编码为 flac,但它给我带来了分段错误,而且我还找不到克服这个问题的方法。

答案1

flac编码器肯定不会做采样率/位深转换。然而,sox 可以即时为您完成此操作。试试这个:

arecord -d4 -f dat -t wav -r 48000 -c 2 | sox - -b16 -r16k -c1 -t wav - | flac - -o message.flac

sox 的论点是:

  1. -使用标准输入
  2. -b16输出位深度
  3. -r16k输出16kHz采样率
  4. -c1输出一个通道
  5. -t wav指定 wav 输出格式
  6. -将结果发送到标准输出

因为输入flac已经是16kHz,所以不需要指定输入采样率。

相关内容