2016-12-29 7 views
1

私は、オープンソースのコーデックであるため、将来私のBluRaysをエンコードするためにVP9を使用することを検討しています。しかし、私はハンドブレーキを得ることができないか、ffmpegは私の(8)コアの50%(4)を使用します。したがって、エンコード時間は、すべてのコアを使用するx264/5よりもはるかに悪いです。VP9エンコーディングは4つのスレッドに限定されていますか?

ハンドブレーキでは、エンコーダをVP9とCQ19に設定しました。パラメータフィールドに「スレッド8」、「スレッド16」または「スレッド64」を追加しても違いはありません。

コマンドライン( "-c:v libvpx-vp9 -crf 19 -threads 16 -tile-columns 6 -frame-parallel 1 -speed 0")でのffmpegのテストでは、これ以上のCPUスレッドは使用されません。

現在のエンコーダが4つ以上のスレッドでエンコードできないのですか、何か問題がありますか?

  • Linuxのミント18
  • ハンドブレーキ0.10.2 + ds1-2build1
  • ffmpegの2.8.10-0ubuntu0.16.04.1
  • libvpx3 1.5.0-2ubuntu1

答えて

6

Libvpxの用途タイルの数と同じ数のスレッドを持つことができます。 -tile-columnsオプションはlog2形式です(-tile-columns 6は64タイルを意味します)が、フレームサイズによっても制限されます。正確な詳細はhereであり、基本的にはmax_tiles = max(1, exp2(floor(log2(sb_cols)) - 2))を意味します。sb_cols = ceil(width/64.0)です。

Width: 320 (sb_cols: 5), min tiles: 1, max tiles: 1 
Width: 640 (sb_cols: 10), min tiles: 1, max tiles: 2 
Width: 1280 (sb_cols: 20), min tiles: 1, max tiles: 4 
Width: 1920 (sb_cols: 30), min tiles: 1, max tiles: 4 
Width: 3840 (sb_cols: 60), min tiles: 1, max tiles: 8 

そうでも1080(横1920ピクセル)、あなただけの取得のための4枚のタイル最大なので、4つのスレッド、最大、すなわちビットストリーム:あなたは与えられた水平解像度のためのタイルの数を計算するために小さなスクリプトを書くことができます制限。 8タイルを得るには、少なくとも1985ピクセルの幅が必要です(2048-64 + 1、これはsb_cols = 32になります)。最大値よりも多くのスレッドを取得するには与えられた解像度でタイルの数を増やすには、libvpxが実装していないフレームレベルのマルチスレッドが必要です。 x265/x264のような他のエンコーダはこれを実装します。

+0

あなたの説明をお寄せいただきありがとうございます。妥当なパフォーマンスでVP9をエンコードする方法は他にありますか? – kellerkindt

+1

あなたの最良の賭けは、 '-speed'パラメータに高い値を使うことです。それが十分ではないか、またはあなたの意図したユースケースに対して品質があまりにも高すぎる場合は、私は運が悪いと思います... –

+0

ffmpeg 3.3/libvpx 1.6.2以降、明らかに '-row-mt = 1 'オプションを使用して、より良いエンコーディング並列化と1080pコンテンツ用の4つ以上のスレッドを提供します。ねじれ奴たちはナッツに行く! - https://groups.google.com/a/webmproject.org/forum/#!topic/codec-devel/oiHjgEdii2U – Programster

関連する問題