Como criar um PCM wav com o mplayer?

3

Eu quero reencodificar um audiolivro para meu celular com speexenc. O primeiro passo é reencodificar o arquivo com o 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

É o que encontrei na internet. Mas o outfile não é um pcm wav:

file *.wav
RIFF (little-endian) data, WAVE audio, mono 22050 Hz

Onde um wav de referência do xiph.org é pcm.

file wb_male.wav 
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

speexenc codifica o último PCM WAV, mas não com o arquivo mplayer. Por que não? O Audiooutput chamado "pcm" não produz um arquivo pcm? Como corrigi-lo? E há uma maneira fácil de canalizar o wav diretamente para speexenc sem um fifo nomeado?

    
por Ludwig 27.09.2011 / 14:48

3 respostas

4

A página do manual do MPlayer usa esta sintaxe:

mplayer -ao pcm:file=test.wav test.avi

Se você quiser fazer coisas como limitar a taxa de amostragem, pode usar uma opção -srate (como -srate 44100 para o áudio do CD do redbook).

Mas, se você o tiver instalado, sugiro usar ffmpeg porque, na verdade, é para fazer essas coisas.

    
por 27.09.2011 / 20:25
1

O arquivo wav gerado por mplayer -ao pcm de um mp3 está no formato PCM. Acontece que é PCM de ponto flutuante porque é isso que vem naturalmente do decodificador de mp3. file deveria ter dito isso, mas não sabe sobre o formato PCM de ponto flutuante.

O decodificador de mp3 produz float e -ao pcm apenas grava qualquer formato que receba, então você precisa de algo entre eles para alterar o formato: o filtro af format . Para little-endian de 16 bits assinado (que é o que você provavelmente deseja), -af format=s16le fará isso.

    
por 29.08.2012 / 21:57
0

Quando você executa o mplayer com a saída pcm, ele informa a maneira mais rápida de fazer isso:

Info: Faster dumping is achieved with -benchmark -vc null -vo null -ao pcm:fast

então

mplayer in.mp3 -benchmark -vc null -vo null -ao pcm:fast:file=out.wav -af format=s16le

Resultado:

$ file out.wav
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 48000 Hz

Isso é bom o suficiente? Você pode usar sox ou audacity para converter estéreo para mono.

    
por 03.11.2017 / 12:06

Tags