spexencを使って携帯電話のオーディオブックを再エンコードしたいです。最初のステップは、mplayerを使用してファイルを再エンコードすることです。
for i in *.mp3; do
mplayer -ao pcm:waveheader "$i" -af pan=1:0.5:0.5,resample=22050 -ao pcm:file="$i.wav";
done
オンラインで見つけました。しかし、出力ファイルはpcm wavではありません。
file *.wav
RIFF (little-endian) data, WAVE audio, mono 22050 Hz
xiph.orgの参照wavはpcmです。
file wb_male.wav
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz
spexencは最後のPCM WAVをエンコードしますが、mplayerファイルはエンコードしません。なぜできないの? 「pcm」というオーディオ出力がpcmファイルを出力しませんか?どうすれば修正できますか? fifoに名前を付けずにwavをspeexencに直接パイプする簡単な方法はありますか?
答え1
これMPlayerのマニュアルページ次の構文を使用します。
mplayer -ao pcm:file=test.wav test.avi
サンプルレートの制限などの操作を実行するには、-srate
オプション(-srate 44100
Redbook CD Audioなど)を追加できます。
ただし、インストールした場合はffmpeg
実際にはそうするように設計されているため、使用することをお勧めします。
答え2
mplayer -ao pcm
mp3で生成されたwavファイルはPCM形式です。それはmp3デコーダが自然に生成するので、浮動小数点PCMです。file
これは言うべきですが、浮動小数点PCM形式がわかりません。
mp3デコーダは浮動小数点を生成し、受信したフォーマットを記録する-ao pcm
ので、フォーマットを変更するにはその間にaf format
フィルタが必要です。署名された16ビットリトルエンディアン(おそらくあなたが望むもの)の場合、これを行うことが-af format=s16le
できます。
答え3
pcm出力でmplayerを実行すると、最速の方法が表示されます。
Info: Faster dumping is achieved with -benchmark -vc null -vo null -ao pcm:fast
だから
mplayer in.mp3 -benchmark -vc null -vo null -ao pcm:fast:file=out.wav -af format=s16le
結果:
$ file out.wav
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 48000 Hz
これで十分ですか? soxまたはaudacityを使用してステレオをモノラルに変換できます。