1
我正在爲合同規定的網站構建基於Flash的錄製應用程序。它將記錄的語音(通過SWF)流式傳輸到Red5服務器,然後使用FFmpeg和SoX的組合來編輯帶有較低音量背景音樂軌道的人聲音頻。這一切都必須按需發生,也就是說,當用戶「保存」他或她的人聲錄音時。將FLV音頻流與WAV背景音軌混合,然後轉換爲帶有SoX和FFmpeg的MP3
這是我將運行的示例命令。爲了保護無辜者,名稱已經改變。文件名描述了最終文件的作用:
sox --combine mix -p --no-show-progress --norm "|ffmpeg -i /usr/share/red5/webapps/audiorecorder/stream/SPOKEN_VOICE.flv -t wav pipe:1" /var/www/ufiles/music/BACKGROUND_MUSIC.wav - | ffmpeg -i pipe:1 /var/www/ufiles/recordings/COMPILED_AUDIO_RECORDING.mp3
當我運行shell命令,這是發生了什麼:
$ sox --combine mix -p --no-show-progress --norm "|ffmpeg -i audioStream_1321399534128_21.flv -ar 44100 -ac 2 -t wav pipe:1" wrong.wav - | ffmpeg -i pipe:1 ~/www/trauma101.com/compiled.mp3
ffmpeg version N-34884-g7575980, Copyright (c) 2000-2011 the FFmpeg developers
built on Nov 15 2011 14:06:49 with gcc 4.4.5
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-x11grab --enable-libspeex
libavutil 51. 25. 0/51. 25. 0
libavcodec 53. 34. 0/53. 34. 0
libavformat 53. 20. 0/53. 20. 0
libavdevice 53. 4. 0/53. 4. 0
libavfilter 2. 48. 1/2. 48. 1
libswscale 2. 1. 0/2. 1. 0
libpostproc 51. 2. 0/51. 2. 0
ffmpeg version N-34884-g7575980, Copyright (c) 2000-2011 the FFmpeg developers
built on Nov 15 2011 14:06:49 with gcc 4.4.5
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-x11grab --enable-libspeex
libavutil 51. 25. 0/51. 25. 0
libavcodec 53. 34. 0/53. 34. 0
libavformat 53. 20. 0/53. 20. 0
libavdevice 53. 4. 0/53. 4. 0
libavfilter 2. 48. 1/2. 48. 1
libswscale 2. 1. 0/2. 1. 0
libpostproc 51. 2. 0/51. 2. 0
[libspeex @ 0x1e36b20] Missing Speex header, assuming defaults.
Input #0, flv, from 'audioStream_1321399534128_21.flv':
Metadata:
novideocodec : 0
server : Red5 Server 1.0.0 RC2 Rev: 4295
creationdate : Tue Nov 15 15:25:41 PST 2011
canSeekToEnd : true
Duration: 00:00:06.77, start: 0.000000, bitrate: 43 kb/s
Stream #0:0: Audio: speex, 16000 Hz, 1 channels, s16
Invalid duration specification for t: wav
sox FAIL formats: can't open input pipe `|ffmpeg -i audioStream_1321399534128_21.flv -ar 44100 -ac 2 -t wav pipe:1': premature EOF
我認爲這個問題是從FLV的轉換而產生WAV在FFmpeg中,並且由於它被傳入,導致整個過程失敗。我總是得到這個持續時間的警告,但是當FFmpeg輸出到一個.wav文件並且單獨運行SoX命令時,我仍然可以從SoX獲得一個WAV並手動將其轉換爲MP3。我想在一行中完成所有這些工作,在應用程序之間傳輸數據。
我該怎麼辦?