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를 사용하여 스테레오를 모노로 변환할 수 있습니다.