mcpField
F
ffmpeg-hardware-acceleration

ffmpeg-hardware-acceleration

github.com/josiahsiegelクリエイティブ・メディア5985 回インストール19 週間前に更新
リポジトリ

ffmpeg-hardware-acceleration について

GPU アクセラレーションが必要な FFmpeg ユーザー向けに、ハードウェアエンコード、デコード、フィルター処理を解説するスキルです。ライブ配信、バッチ処理、サーバー側のトランスコードに向けて、各社のバックエンドや性能確認方法を扱います。

主な機能

  1. 01利用可能なアクセラレーション方式の検出
  2. 02各社のエンコーダーとデコーダーの選択
  3. 03GPU フィルターパイプラインの構築
  4. 04品質とプリセットの調整
  5. 05ベンチマークと GPU 使用状況の監視

活用シーン

  1. 01ライブ配信のエンコード高速化
  2. 02動画の一括トランスコード
  3. 03サーバー側 GPU トランスコードの実行
  4. 04Docker での GPU パススルー利用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-hardware-acceleration

インストール後、Claude Code で/ffmpeg-hardware-accelerationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
amd-amf-vaapi-videotoolbox.md
gpu-memory-and-troubleshooting.md
intel-qsv.md
nvidia-nvenc.md
opencl-filters.md
vulkan.md

詳細

このスキルを使う場面

GPU アクセラレーションが必要な場合に有効化します。

  • エンコード速度が重要な場合(CPU より 10~30 倍高速)
  • 大量の動画をバッチ処理する場合
  • ストリーミング用にリアルタイムでエンコードする場合
  • サーバー側で大規模にトランスコードする場合
  • GPU パススルーを使用する Docker コンテナーの場合

GPU エンコードは、大幅な高速化と引き換えに画質が多少低下します。画質を調整するには、-cq、-qp、または -global_quality を使用します。

クイックリファレンス

プラットフォームエンコーダーデコーダー検出コマンド
NVIDIAh264_nvenc、hevc_nvenc、av1_nvench264_cuvid、hevc_cuvidffmpeg -encoders | grep nvenc
Intel QSVh264_qsv、hevc_qsv、av1_qsvh264_qsv、hevc_qsvffmpeg -encoders | grep qsv
AMD AMFh264_amf、hevc_amf、av1_amfN/A(ソフトウェアを使用)ffmpeg -encoders | grep amf
Appleh264_videotoolbox、hevc_videotoolboxh264_videotoolboxmacOS のみ
VAAPIh264_vaapi、hevc_vaapi、av1_vaapi-hwaccel vaapi を使用Linux のみ
Vulkanh264_vulkan、hevc_vulkan、av1_vulkan、ffv1_vulkanVP9、ProRes RAW(8.0+)ffmpeg -encoders | grep vulkan

現在の最新バージョン:FFmpeg 8.0.1(2025-11-20 リリース)。ffmpeg -version で確認してください。

ハードウェアアクセラレーションの概要

ハードウェアアクセラレーションでは、動画処理に専用の GPU/SoC コンポーネントを使用します。

  • NVENC/NVDEC(NVIDIA):専用のエンコード/デコードエンジン
  • QSV(Intel):統合グラフィックス搭載の Intel CPU で利用できる Quick Sync Video
  • AMF(AMD):AMD GPU 向け Advanced Media Framework
  • VideoToolbox(Apple):macOS/iOS のハードウェアアクセラレーション
  • VAAPI(Linux):Video Acceleration API(Linux 上の Intel、AMD)
  • Vulkan Video(クロスプラットフォーム、FFmpeg 7.1+/8.0):コンピュートシェーダーベースのコーデック
パフォーマンス比較(2025 年のベンチマーク)
方式速度画質消費電力用途
libx264(CPU)1x最高高画質重視
libx265(CPU)0.3x最高非常に高アーカイブ
h264_nvenc10-20x良好低リアルタイム、ストリーミング
hevc_nvenc8-15x良好低4K ストリーミング
h264_qsv8-15x良好非常に低ノート PC、省電力
h264_amf8-15x良好低AMD システム

基本的なワークフロー

  1. 利用可能なものを検出します:ffmpeg -hwaccels、ffmpeg -encoders | grep <api>
  2. バックエンドを選択します:ベンダー純正のものを優先します(NVIDIA では NVENC、Intel では QSV、AMD では AMF、Apple では VideoToolbox)。クロスプラットフォームでの移植性が必要な場合は Vulkan を使用します。
  3. 可能な限り GPU だけで完結するパイプラインを構築します:
    • -hwaccel <api> と -hwaccel_output_format <api> を -i の前に追加します
    • GPU 側のフィルター(scale_cuda、scale_vulkan、vpp_qsv など)を使用します
    • 対応するハードウェアエンコーダーを使用します
  4. 画質を調整します:-preset(NVENC では p1-p7)、-cq/-qp/-global_quality、先読み、空間/時間 AQ を調整します
  5. 検証します:ffmpeg -benchmark でベンチマークを実行し、nvidia-smi dmon、intel_gpu_top などで GPU を監視します

バックエンドごとの最小限の例

# NVIDIA NVENC
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
  -c:v h264_nvenc -preset p4 -b:v 5M output.mp4

# Intel QSV
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -i input.mp4 \
  -c:v h264_qsv -preset medium -b:v 5M output.mp4

# AMD AMF
ffmpeg -i input.mp4 -c:v h264_amf -quality balanced -b:v 5M output.mp4

# Apple VideoToolbox
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5M output.mp4

# Linux VAAPI
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
  -hwaccel_output_format vaapi -i input.mp4 \
  -c:v h264_vaapi -b:v 5M output.mp4

# Vulkan (cross-platform)
ffmpeg -init_hw_device vulkan -i input.mp4 \
  -c:v h264_vulkan -b:v 5M output.mp4

GPU だけで完結するパイプラインのパターン(重要)

ffmpeg -y -vsync 0 \
  -hwaccel cuda -hwaccel_output_format cuda \
  -i input.mp4 \
  -vf scale_cuda=1280:720 \
  -c:v h264_nvenc -preset p4 -b:v 5M \
  -c:a copy \
  output.mp4

-hwaccel_output_format を省略すると、デコードしたフレームが気づかないうちに CPU メモリとの間を往復するため、スループットが最大 50% 低下することがあります。メモリフロー図とベストプラクティスについては、references/gpu-memory-and-troubleshooting.md を参照してください。

ベンダー横断フィルターの早見表

操作NVIDIAIntelAMD/Linuxクロスプラットフォーム
スケーリングscale_cuda, scale_nppvpp_qsv, scale_qsvscale_vaapiscale_vulkan, scale_opencl, libplacebo
オーバーレイoverlay_cuda--overlay_vulkan, overlay_opencl
デインターレースbwdif_cudavpp_qsvdeinterlace_vaapibwdif_vulkan
ノイズ除去bilateral_cuda--nlmeans_vulkan, nlmeans_opencl
クロマキーchromakey_cuda--colorkey_opencl
トーンマッピング(HDR->SDR)--tonemap_vaapilibplacebo, tonemap_opencl
パディング/レターボックスpad_cuda (8.0+)--pad_opencl

ユースケース別クイックレシピ

ライブストリーミング(低遅延)
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 6M \
  -f flv rtmp://server/live/stream
VOD(品質目標)
ffmpeg -i input.mp4 \
  -c:v hevc_nvenc -preset p6 -tune hq \
  -rc vbr -cq 22 -b:v 0 \
  -rc-lookahead 32 -spatial-aq 1 \
  output.mp4
バッチ/並列エンコード
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input1.mp4 -c:v h264_nvenc output1.mp4 &
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input2.mp4 -c:v h264_nvenc output2.mp4 &
wait
Docker(GPU パススルー)
docker run --gpus all --rm -v $(pwd):/data \
  jrottenberg/ffmpeg:nvidia \
  -hwaccel cuda -hwaccel_output_format cuda \
  -i /data/input.mp4 -c:v h264_nvenc /data/output.mp4

ベストプラクティス

  1. CPU と GPU の間のメモリ転送を避けるため、可能な限り GPU のみで完結するパイプラインを使用してください
  2. 最適なパフォーマンスを得るため、デコードとエンコードで同じハードウェアを使用してください
  3. プリセットは慎重に選択してください。高速であっても、品質が高いとは限りません
  4. 品質が重要なエンコードでは、先読みと AQ を有効にしてください
  5. 対象のハードウェアでテストしてください。品質は GPU の世代によって異なります
  6. 高解像度コンテンツでは GPU メモリを監視してください
  7. ノート PC やサーバーでは、電力効率も考慮してください
  8. パフォーマンスと機能を改善するため、ドライバーを定期的に更新してください

リファレンスマップ

各バックエンドの詳細については、以下を参照してください。

  • NVIDIA NVENC/NVDEC(プリセット、CUDA フィルター、scale_npp、ハイブリッドパイプライン、2 パス、マルチ GPU、1:N ABR):references/nvidia-nvenc.md
  • Intel QSV(フルパイプライン、vpp_qsv、先読み、マルチ GPU、VVC デコード):references/intel-qsv.md
  • AMD AMF、VAAPI、Apple VideoToolbox(エンコーダー、スケーリング、VVC VAAPI 8.0+ SCC サポート):references/amd-amf-vaapi-videotoolbox.md
  • Vulkan Video と Vulkan フィルター(h264/hevc/av1/ffv1、VP9/ProRes RAW デコード、スケーリング/オーバーレイ/ぼかし/トランジション/libplacebo):references/vulkan.md
  • OpenCL フィルター(スケーリング、オーバーレイ、colorkey、nlmeans、手ぶれ補正、アンシャープ、トーンマッピング):references/opencl-filters.md
  • GPU メモリ管理、フィルター比較マトリックス、Docker、トラブルシューティング:references/gpu-memory-and-troubleshooting.md

コメント