ffmpeg-hardware-acceleration について
GPU アクセラレーションが必要な FFmpeg ユーザー向けに、ハードウェアエンコード、デコード、フィルター処理を解説するスキルです。ライブ配信、バッチ処理、サーバー側のトランスコードに向けて、各社のバックエンドや性能確認方法を扱います。
主な機能
- 01利用可能なアクセラレーション方式の検出
- 02各社のエンコーダーとデコーダーの選択
- 03GPU フィルターパイプラインの構築
- 04品質とプリセットの調整
- 05ベンチマークと GPU 使用状況の監視
活用シーン
- 01ライブ配信のエンコード高速化
- 02動画の一括トランスコード
- 03サーバー側 GPU トランスコードの実行
- 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.mdgpu-memory-and-troubleshooting.mdintel-qsv.mdnvidia-nvenc.mdopencl-filters.mdvulkan.md詳細
このスキルを使う場面
GPU アクセラレーションが必要な場合に有効化します。
- エンコード速度が重要な場合(CPU より 10~30 倍高速)
- 大量の動画をバッチ処理する場合
- ストリーミング用にリアルタイムでエンコードする場合
- サーバー側で大規模にトランスコードする場合
- GPU パススルーを使用する Docker コンテナーの場合
GPU エンコードは、大幅な高速化と引き換えに画質が多少低下します。画質を調整するには、-cq、-qp、または -global_quality を使用します。
クイックリファレンス
| プラットフォーム | エンコーダー | デコーダー | 検出コマンド |
|---|---|---|---|
| NVIDIA | h264_nvenc、hevc_nvenc、av1_nvenc | h264_cuvid、hevc_cuvid | ffmpeg -encoders | grep nvenc |
| Intel QSV | h264_qsv、hevc_qsv、av1_qsv | h264_qsv、hevc_qsv | ffmpeg -encoders | grep qsv |
| AMD AMF | h264_amf、hevc_amf、av1_amf | N/A(ソフトウェアを使用) | ffmpeg -encoders | grep amf |
| Apple | h264_videotoolbox、hevc_videotoolbox | h264_videotoolbox | macOS のみ |
| VAAPI | h264_vaapi、hevc_vaapi、av1_vaapi | -hwaccel vaapi を使用 | Linux のみ |
| Vulkan | h264_vulkan、hevc_vulkan、av1_vulkan、ffv1_vulkan | VP9、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_nvenc | 10-20x | 良好 | 低 | リアルタイム、ストリーミング |
| hevc_nvenc | 8-15x | 良好 | 低 | 4K ストリーミング |
| h264_qsv | 8-15x | 良好 | 非常に低 | ノート PC、省電力 |
| h264_amf | 8-15x | 良好 | 低 | AMD システム |
基本的なワークフロー
- 利用可能なものを検出します:
ffmpeg -hwaccels、ffmpeg -encoders | grep <api> - バックエンドを選択します:ベンダー純正のものを優先します(NVIDIA では NVENC、Intel では QSV、AMD では AMF、Apple では VideoToolbox)。クロスプラットフォームでの移植性が必要な場合は Vulkan を使用します。
- 可能な限り GPU だけで完結するパイプラインを構築します:
-hwaccel <api>と-hwaccel_output_format <api>を-iの前に追加します- GPU 側のフィルター(
scale_cuda、scale_vulkan、vpp_qsvなど)を使用します - 対応するハードウェアエンコーダーを使用します
- 画質を調整します:
-preset(NVENC ではp1-p7)、-cq/-qp/-global_quality、先読み、空間/時間 AQ を調整します - 検証します:
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 を参照してください。
ベンダー横断フィルターの早見表
| 操作 | NVIDIA | Intel | AMD/Linux | クロスプラットフォーム |
|---|---|---|---|---|
| スケーリング | scale_cuda, scale_npp | vpp_qsv, scale_qsv | scale_vaapi | scale_vulkan, scale_opencl, libplacebo |
| オーバーレイ | overlay_cuda | - | - | overlay_vulkan, overlay_opencl |
| デインターレース | bwdif_cuda | vpp_qsv | deinterlace_vaapi | bwdif_vulkan |
| ノイズ除去 | bilateral_cuda | - | - | nlmeans_vulkan, nlmeans_opencl |
| クロマキー | chromakey_cuda | - | - | colorkey_opencl |
| トーンマッピング(HDR->SDR) | - | - | tonemap_vaapi | libplacebo, 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
ベストプラクティス
- CPU と GPU の間のメモリ転送を避けるため、可能な限り GPU のみで完結するパイプラインを使用してください
- 最適なパフォーマンスを得るため、デコードとエンコードで同じハードウェアを使用してください
- プリセットは慎重に選択してください。高速であっても、品質が高いとは限りません
- 品質が重要なエンコードでは、先読みと AQ を有効にしてください
- 対象のハードウェアでテストしてください。品質は GPU の世代によって異なります
- 高解像度コンテンツでは GPU メモリを監視してください
- ノート PC やサーバーでは、電力効率も考慮してください
- パフォーマンスと機能を改善するため、ドライバーを定期的に更新してください
リファレンスマップ
各バックエンドの詳細については、以下を参照してください。
- 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
コメント
Markdown 対応