web-dev-qa-db-ja.com

GPUを使用してh264をエンコードできますか?

より良いグラフィックスカードを手に入れたら、ハンドブレーキを使用して私のマシンでh264エンコーディングを高速化できるでしょうか?

もしそうなら、どのグラフィックカードがこれをサポートするかをどのようにして知ることができますか?

GPUがh264のハードウェアデコードを実行できることは知っていますが、エンコードについては不明です。

13
peter

ハンドブレーキを使用すると、答えはノーになります。 Handbrakeは、CPUのみのh.264エンコーダーですが、現在はビデオスケーリング用に OpenCLを使用できます であり、ビデオデコード用のDXVAをある程度サポートしています。

Slhckによってリンクされた質問は MediaCoder について言及していますが、Nvidiaグラフィックカードまたは第2世代グラフィックコアを搭載したIntel CPUのいずれかが必要です。

時代遅れの古い製品がいくつかあり、特にBadaboomとATI Avivoソフトウェアがあります。

Badaboom これは、NvidiaおよびIntelグラフィックプロセッサを使用してエンコードプロセスを高速化できますが、現在はサポートが終了しており、新しいグラフィックカードをサポートしていません。

ATIには独自のビデオエンコーダーがありましたが、以前は「Avivo」と呼ばれていましたが、AMDビデオコンバーターが含まれているAMDコーデックパッケージにマージされました。

7
Mokubai

x264 はOpenCLエンコーディングアクセラレーションをサポートするようになりました。あなたが得るどのくらいの加速はあなたのグラフィックカードのパフォーマンスに依存します、私のGTS 450では私は何も得ず、遅いカードでは実際にエンコードを遅くします。より良いカードが役立つかもしれません。必要なのは、x264コマンドラインに--openclを追加することだけです。私はハンドブレーキが同じx264ライブラリを使用し、新しいビルドで 提供しています 同じOpenCLアクセラレーションを使用していると思います。

4
totaam

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpegは、ハードウェアアクセラレーション用のサブシステムを提供します。

ハードウェアアクセラレーションにより、特定のデバイス(通常はグラフィックカード>またはその他の特定のデバイス)を使用してマルチメディア処理を実行できます。これにより、専用のハードウェアを使用して、CPUをそのような計算から解放しながら、要求の厳しい計算を実行できます。通常、ハードウェアアクセラレーションにより、特定のハードウェアデバイス(通常はGPU)がビデオストリームのデコードとエンコード、またはビデオのフィルタリングに関連する操作を実行できます。

FFmpegツールを使用する場合、ハードウェアアシストのデコードは-hwaccelオプション。特定のデコーダーを有効にします。各デコーダーには特定の制限がある場合があります(たとえば、H.264デコーダーはベースラインプロファイルのみをサポートする場合があります)。 HWアシストエンコーディングは、特定のエンコーダー(nvenc_h264など)を使用して有効にします。 HW支援処理のフィルタリングは、いくつかのフィルターでのみサポートされています。その場合、フィルターオプションを使用してOpenCLコードを有効にします。

いくつかのハードウェアアクセラレーション標準APIがあり、そのうちのいくつかはFFmpegによってある程度サポートされています。

「-hwaccel auto」オプションを使用すると、エンコードセッションに使用するハードウェアベースの高速デコードを選択できます。入力前にこのパラメーターを "auto"で追加できます(x264がOpenCLサポートでコンパイルされている場合は、-x264opts paramを追加してみてください)。次に例を示します。

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

申し訳ありませんが、「-hwaccel」で利用可能なすべてのオプションを一覧表示する方法を思い出せません。

また、これを試すこともできます: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

2
Ruslan Berozov

現在、Handbrakeは、H.264/AVCの次のハードウェアアクセラレータエンコーダーをサポートしています。

  1. Intel QuickSync (WindowsおよびLinux)。これは、少なくともIntelベースの Sandybridge (第2世代Core)-統合グラフィックスが有効でオペレーティングシステムに公開されているシリーズプロセッサラインと互換性があります。許容できるエンコード品質の推奨ハードウェア: Haswell (第4世代コアシリーズ)以降、細粒度ターゲットレベル(TU)、先読み機能( LA-BRCおよびICQエンコードモード )。パフォーマンスが大幅に向上しています。ハンドブレーキのドキュメントの使用ガイドを参照してください こちら

  2. NVIDIAのNVENC :これには、少なくとも NVIDIAのKepler (GK +)シリーズGPU以上が高性能コンシューマーSKU(GTXシリーズ)から必要です)およびプロのラインナップ(KedroおよびTesla GPU、Kepler以降をベース)。これは、WindowsとLinuxの両方で使用できます。

注目すべきは、NVENCを使用すると、コンシューマSKUで同時に最大2つのエンコードセッションに人工的に制限されることですが、プロのラインナップはこれによる影響を受けません。特定のエンコーダー機能のリファレンスについては、 GPUマトリックス を参照してください。エンコーダのパフォーマンスと品質を最高にするには、 Pascal および Volta GPUの最新の反復に固執します。

オプション:

  1. AMD AMFの エンコーディングサポートは、Windowsのみの現在のナイトリービルドでも利用できます。 AMDのAMF(すべての GCN + SKUのハードウェアに組み込まれている VCEエンコーダー を利用する)に関する特別な注意事項は、新しい Polaris (RX 400+シリーズ)および Vega などのハードウェア、H.264/AVCの一部の高度なエンコーダー調整は非推奨になりましたHEVCエンコーディングサポートが導入されたためです。 AMD ドロップ はBフレームエンコーディングであり、前述のハードウェアベースのエンコーダー(QuickSyncおよびNVENC)が、後退なし。また、予想されるスループットメトリックに関する注意事項については、 this を参照してください。

Appleのサポートに関する限り、これはせいぜい 暫定的ですVideoToolBox APIは、Handbrakeの範囲を超えて実装されている場合も、非常に限定されたコントロールセットを持っているようです。ハンドブレーキが上流でそれを採用しても、品質保持とスループットの面で奇跡を期待しないでください。

現在のように、プラットフォームで最新のエンコーダー機能を使用するには、最新のナイトリービルドを使用する必要がある場合があります。これは間違いなく将来的に変更されます。

0
林正浩