2011-11-16 8 views
1

私は、契約されたWebサイト用の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 

$ 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に変換することができる。私はアプリケーション間でデータをパイプすることで、このすべてを1行で行いたいと思います。

私は何をしますか?

答えて

0

問題はここにある:

sox FAIL formats: can't open input pipe 

私はあなたがsoxは、パイプから読み取る正規化し、wavに変換したいと仮定します。その場合、mix引数は冗長です。このようなものは、次のようになります。

sox -p -t wav - gain -n | ... 
関連する問題