2016-04-11 7 views
0

ビデオとステレオオーディオを使用してrtmp入力を受信します。私は、オーディオを分割し、左のチャンネルと右のチャンネルの2つのビデオを別々のアドレスに送る必要があります。私はそのようなコマンドを持っています:ffmpegのステレオ分割とブロードキャストを最適化する

ffmpeg -r 25 -loop 1 -i background.png \ 
-rtbufsize 2000M -i rtmp://stereoinput \ 
-filter_complex "[1:v][0:v]overlay[video];[video]split[video][video2];[1:a]channelsplit[aleft][aright]" \ 
-map [video] -map [aleft] -c:v libx264 -minrate 1000k -maxrate 1500k -b:v 1300k -bufsize 1000k \ 
-pix_fmt yuv420p -r 25 -g 100 -tune zerolatency -preset ultrafast \ 
-c:a libmp3lame -ar 44100 -y -f flv rtmp://out_left \ 
-map [video2] -map [aright] -c:v libx264 -minrate 1000k -maxrate 1500k -b:v 1300k -bufsize 1000k \ 
-pix_fmt yuv420p -r 25 -g 100 -tune zerolatency -preset ultrafast \ 
-c:a libmp3lame -ar 44100 -y -f flv rtmp://out_right 

しかし、それは遅く実行します:それはわずか20 fpsを出力します。 4GBのRAMと4つのコアを持つAzure VPSをエンコードしており、このような問題が発生しているとは考えていませんでした。 1つのストリームを完全にエンコードします。

これをより速くする方法はありますか? たとえば、同じビデオストリームを2回エンコードしなければならないことも嫌いです。私はコマンドの出力全体を見なければならないので、2つのコマンドを用意する余裕はない。

答えて

0

tee擬似マルチプレクサを使用すると、ストリームを1回エンコードして複数回再利用することができます。

ffmpeg -r 25 -loop 1 -i background.png \ 
-rtbufsize 2000M -i rtmp://stereoinput \ 
-filter_complex "[1:v][0:v]overlay[video];[1:a]channelsplit[aleft][aright]" 
-map [video] -map [aleft] -map [aright] 
-c:v libx264 -minrate 1000k -maxrate 1500k -b:v 1300k -bufsize 1000k -pix_fmt yuv420p 
-r 25 -g 100 -tune zerolatency -preset ultrafast -c:a libmp3lame -ar 44100 -y 
-f tee "[f=flv:select=v,\'a:0\']rtmp://out_left|[f=flv:select=v,\'a:1\']rtmp://out_right" 

ティーミュクサーにおける選択式のでa:1が第2マッピングされたオーディオ出力ストリーム手段とvが全てマッピングされたビデオ出力ストリームを意味し、マッピングされた出力ストリームを指します。

+0

「ffmpeg -i input.mp4 -c copy -f tee」[f = flv] rtmp:/ out1 | [f = flv] rtmp:/と同じように、/out2 "' Winの場合、 'loglevel verbose'でも'出力ファイル#0にはストリームが含まれていません 'と表示されますが、例えば、youtubeはストリームを受信しますが、放送は開始しません他のプレイヤーでは黒い画面しか表示されません。それを成功裡にキャッチしてください。 – Ngoral

+0

この特定のケースでは、エンコードがflvに準拠しているかどうかによって異なります。上記の私の命令を試しましたか? – Mulvya

+0

はい、私は試してみましたが、実際にはビデオは聞こえません。 – Ngoral

関連する問題