ffmpeg -threads設定を変更する方法


14

チューブサイトでの作業。私はmp4に変換するためにLinux専用サーバーでffmpegを介してビデオを実行しています。

サーバーの仕様:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

テスト中の問題は、一度に4〜5回しか実行しない場合でも、サーバーの負荷が平均で約36に急増することです。これはたった1人です。それが開くと、多くの人が一度にアップロードすることを想像します。

そうですffmpegの試みは、変換ごとに使用可能なすべてのリソースを使用します。

変更できる-threads設定があると聞きましたが、見つけることができません。8 cpuサーバーがあります。変換にのみ使用されるので、最適な設定は2〜4の間になると聞きました。テストできます。

しかし、この設定を変更するにはどうすればよいですか?私がオンラインで見るすべてのものは、この設定について説明していますが、それを変更する手順については説明していません。

linux  ffmpeg  cpu  mp4 

回答:


17

あなたが望むオプションフラグは本当にただで-threadsあり、あなたはこれを次のように使用します(ただ1つのスレッドに対して):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

ただし、再スケーリング、フィルターの適用、最終的なフレーム品質/フレームレートなど、サーバーの負荷と運用時間を増加させる微妙な点がいくつかあります。かつ事実上!!!)

速度を上げるためのいくつかのヒントを次に示します。

  1. キューを使用して、一度に1つのアイテムのみがトランスコードされるようにします
  2. ユーザーに小さなファイルをリクエストする
  3. マシンの全馬力を次の方法で使用します。
    • ラムディスクからの読み取りと書き込み
    • トランスコーディングタスクのためにベアメタルに切り替える
    • 使用する -threads 0

何をするにしても、時間がかかるため、ユーザーにトランスコーディングプロセスについて通知してください。(IJTT)

[LordNeckbeardのコメントを反映するように編集されたコマンド]


10
オプションの配置が重要です。-threads入力する前にこのオプション入力(デコーダ)を適用しています。一般化された使用法はffmpeg [global options] [input options] -i input [output options] outputです。
llogan

では、どこに配置することを提案しますか?初めはグローバルに適用されていると思いましたか?
デンジェロ14

3
出力オプションとして、エンコードオプションになります。どのオプションがとしてマークされているかを表示するには、FFmpegのドキュメントを参照してください(global)
llogan

-threadsargをargの前に置くか後ろに置くかは重要-iですか?また、使用するスレッドの数をどのように決定する必要がありますか?私は基本的にやっている-c copy
チョビー

3

これは少し古いかもしれませんが、これはdockerのようなコンテナにとって完璧なタスクのように聞こえます。

  • full horsepower(denjelloが呼んだように)ffmpegを実行させます
  • しかし、ドッカー内で実行します

ffmpegコマンドラインオプションを使用しなくても、1つのffmpegインスタンスが消費できるリソースの量を制限できるようになりました。CPUだけでなく、メモリとIOも含まれます。

さらに:バックグラウンドで実行される可能性のあるさまざまなタスクがあり、それらがどれだけ時間がかかるかを気にせず、高速に実行するタスクがあるため、さまざまなタスクに重みを付けることができます。

https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resourcesを参照してください

すでにgithubに事前定義されたffmpegイメージがありますhttps : //github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

オーバーヘッドのために、単一の変換の実行速度は遅くなる可能性がありますが、複数のインスタンスを同時に実行する場合、これは大きなメリットになる可能性があります。これは、各タスクが基盤となるOSから分離されているため、セキュリティの向上は言うまでもなく、非常にうまくスケーリングされます。


docker内で実行するのは少し極端ではありませんか?文字通り、Linux scoutapm.com/blog/で
yurtesen

どうして?既にDockerがインストールされており、--rmタスクを実行して終了後にコンテナを削除するためのフラグ付きのコンテナを実行することは、管理者が2019年に行うことができ、実行する必要があることです。特にドキュメント変換の場合 変換は失敗しますか?ローカルツールチェーンをアップグレード/ダウングレードせずに、別のコンバーターバージョンを試してみませんか?インターネットからダウンロードされたため、ドキュメントを信頼していませんか?コンテナでタスクを分離します。Ffmpegも例外ではありません。cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
ユルゲンシュタインブロック

それはマーケティングの話のように聞こえます。Dockerは、あなたが言ったように完璧ではありません-> techbeacon.com/security/…Linux では、通常のユーザーもアクセスとシステムのセキュリティが制限されています。プログラムバージョンのダウングレードの必要は非常にまれであり、リポジトリを介して行うことができます。多くの港湾労働者の画像は、ランダムな人々によって作られています。おそらく、ドキュメントコンバーターのドッカーイメージが危険にさらされ、すべてのドキュメントのコピーがリモートサーバーに送信された可能性があります。そのため、Dockerイメージを使用すると、このような脆弱性の可能性が高まります。それでは何?
ユルテセン

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?リポジトリをチェックアウトし、dockerfileを調べて、docker build -t myimage自分でローカルイメージを作成するために使用します。それとも、それはロケット科学ではない、独自のdockerfileを作成github.com/alfg/docker-ffmpeg/blob/master/Dockerfile
ユルゲン・Steinblock
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.