2017-02-17 68 views
0

こんにちはHLSストリームとしてffmpegのCPU使用量を減らす方法は?

SETLOCAL 
:loop 

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

goto loop 

をHLSストリームを再ストリーミングしていますが、それは私が同じサーバーにそのような16人の流れを作るために持っていますが、私はできないCPUの%15-20を使用しています。

私はちょうどm3u8を複製している.tsファイルをダウンロードするような設定をしていますか?

+0

この質問は、プログラミングとは関係がなく、SuperUser.comに属しています。 – Brad

答えて

3

デフォルトでは、FFmpegはエンコードに関連するパラメータを使用しない場合でも、入力の再エンコードを試みます。あなただけそのままストリームをコピーしたい場合は

、あなたはstreamcopy機能を試してみてください:

-c:v copy -c:a copy

の着信ストリームをコピーすることにより、あなたは完全にエンコード処理をスキップすることができます。 だからあなたのコマンドは次のようになります。あなたは着信ストリームを再エンコードする必要がある場合

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -c:v copy -c:a copy -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

(。それはしかし、うまくいくかどうかわからない)


、あなたが考慮しなければなりませんいくつかのエンコーディングパラメータをコマンドに追加します。 デフォルトでは、ffmpegはソースパラメータと品質を一致させようとしますが、実際のアプリケーションでは必ずしも最適ではありません。

「非常に高速で超高速かつ超高速な」h264プリセットは、パフォーマンスを向上させる良いスタートです。

あなたはまた、などCRF(速度定数ファクター)エンコーディング、高ビットレート、いじることができ

​​

H264のenodingについての詳細:https://trac.ffmpeg.org/wiki/Encode/H.264

+0

私が-presetと入力すると、次のようになります。vコマンドラインへのfastfast ffmpegがフリーズしました –

+0

再エンコードする場合は、コーデックも定義する必要があります。例:-c:v h264' !!!また、 '> log'部分を削除すると、ffmpegが何が間違っているのかが分かりません。 –

0

-Re(入力)はネイティブのフレームレートで入力を読む 。主にグラブデバイスやライブ入力ストリームをシミュレートするために使用されます(ファイルから読み込むときなど)。実際のグラブデバイスやライブ入力ストリーム(パケットロスが発生する可能性がある場所)では使用しないでください。デフォルトでは、ffmpegは可能な限り速く入力を読み込もうとします。このオプションを使用すると、入力の読み込み速度が入力のネイティブフレームレートに低下します。リアルタイム出力(ライブストリーミングなど)に便利です。

0

この質問は既に回答とみなされていますが、コマンドパラメータを調整する必要はなく、ffmpegだけでなく他のツールやコマンドでも使用できるとは思えません。

cpulimitツールは、この目的のために設計されており、ffmpegだけでなく、他のCPUを使用するプロセスでも効果的に動作します。

cpulimitの最も重要な引数は-lで、プロセスが使用できるCPUの割合(上限)を指定できます。この制限はマシンが持つCPU /コア/スレッドの数に依存することにも注意してください。たとえば、マシンに8つのCPUがある場合、cpulimit -l有効な値の範囲は0〜800です(0は無用です。 800は、プロセスをすべて800%と制限しないことは、すべてのマシン処理能力を意味する)。

8のCPUマシンの半分の容量を使用するための例: cpulimit -l 400 ffmpeg ...

希望、これは将来的に、この特定の問題だけでなく、同様のニーズのために役立ちます。

関連する問題