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)
==========================================================================
しかし、結果として、16kHzの1チャンネルトラックが欲しいとflacに正しく知らせる方法がわかりません。通常の「-」の代わりに-dを使用すると許可されません。
録音チャンネル/速度を目標設定にしない理由が何であるかを尋ねることができます。これを行うと、キャプチャされた音質が悪く、低設定でsox / flacを介してflacに変換する方がはるかにうまく機能します。
もともと私はwavをflacに再エンコードしなくてもsoxを使って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なので、入力サンプリングレートを指定する必要はありません。