web-dev-qa-db-ja.com

レコード出力をflacに変換します

レコードの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を記録したかったのですが、セグメンテーション違反が発生し、これを克服する方法がまだ見つかりませんでした。

3
abolotnov

Flacエンコーダーは間違いなくサンプルレート/ビット深度の変換を行いません。ただし、soxはその場でこれを行うことができます。これを試してみてください:

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

Soxの引数は次のとおりです。

  1. -stdinを使用
  2. -b16出力ビット深度
  3. -r16k出力16kHzサンプルレート
  4. -c11つのチャネルを出力します
  5. -t wavwav出力形式を指定します
  6. -結果をstdoutに送信する

flacへの入力はすでに16kHzであるため、入力サンプルレートを指定する必要はありません。

3
mtw