我正在尝试将 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 的论点是:
-
使用标准输入-b16
输出位深度-r16k
输出16kHz采样率-c1
输出一个通道-t wav
指定 wav 输出格式-
将结果发送到标准输出
因为输入flac
已经是16kHz,所以不需要指定输入采样率。