0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AppleローカルAI勢の味方!VideoToolboxってなんだ!?

0
Posted at

はじめに:ローカルAI時代の「動画書き出し問題」

Stable Diffusionで画像を生成し、CogVideoやFramePackで動画を生成し、Llamaでテキストを生成し...。Apple Silicon Macでローカル生成AIを楽しむ人が増えている。

でも、ふと気づく。

「生成した動画フレームをMP4に書き出すの、めっちゃ時間かかるな...」

そう、生成AIが吐き出すのは「画像の連番」や「生のフレームデータ」であることが多い。それを最終的な動画ファイルにエンコードする処理は、また別の話なのだ。

ここで登場するのがVideoToolbox。Apple Silicon Macに搭載されたハードウェアエンコーダ/デコーダを呼び出すためのフレームワークだ。これを使えば、動画のエンコードが爆速になる。

今回は、ローカルAI勢なら知っておきたいVideoToolboxの全貌を解説する。

VideoToolboxとは

Appleの公式ドキュメントによれば:

Work directly with hardware-accelerated video encoding and decoding capabilities.
(ハードウェアアクセラレーションによる動画エンコード・デコード機能に直接アクセスする)

参照:https://developer.apple.com/documentation/videotoolbox

VideoToolboxは、macOS/iOS向けの低レベルフレームワークだ。動画の圧縮(エンコード)・展開(デコード)、そしてピクセルフォーマットの変換といった処理を、ハードウェアアクセラレーションを使って高速に行える。

objc.ioの解説記事では、その歴史について触れられている:

Fast-forward to the present: in iOS 8 and OS X 10.8, Apple published the full Video Toolbox framework. It is a beast! It can compress and decompress video at real time or faster. Hardware accelerated video decoding and encoding can be enabled, disabled, or enforced at will.

(現在に目を向けると、iOS 8とOS X 10.8でAppleはVideo Toolboxフレームワークの全機能を公開した。これは怪物だ!リアルタイムまたはそれ以上の速度で動画を圧縮・展開できる。ハードウェアアクセラレーションによる動画のデコード・エンコードを、任意で有効化・無効化・強制化できる。)

参照:https://www.objc.io/issues/23-video/videotoolbox/

つまり、VideoToolboxを使えば、CPUをぶん回すソフトウェアエンコードではなく、Macに内蔵された専用ハードウェア(Media Engine)を使って動画処理ができるのだ。

なぜローカルAI勢に重要なのか

ローカルで生成AIを動かすとき、こんな処理フローになることが多い:

  1. AIモデルが画像/フレームを生成(GPU使用)
  2. 生成されたフレームを動画にエンコード
  3. 完成した動画を保存

問題は2番目のステップだ。

ソフトウェアエンコーダ(libx264やlibx265)を使うと、CPUが100%張り付きになる。M1/M2/M3/M4 Macは省電力が売りなのに、動画エンコード中はファンが唸り、バッテリーがゴリゴリ減っていく。

しかも、生成AIの処理自体もCPU/GPUリソースを使う。エンコードとAI生成を同時に走らせようものなら、システム全体がもっさりしてしまう。

VideoToolboxを使ったハードウェアエンコードなら:

  • CPU使用率が劇的に下がる(100%→20%程度)
  • 消費電力が大幅に減る(ある報告では18W程度)
  • エンコード速度が3〜4倍速い
  • AI生成と並行しても快適

ローカルAI環境では、限られたリソースをいかに効率よく使うかが勝負。VideoToolboxはその強い味方なのだ。

対応コーデックとApple Siliconの世代

VideoToolboxが対応するコーデックは、チップの世代によって異なる。

エンコード対応(動画を圧縮する)

  • H.264:全てのApple Silicon Mac
  • H.265(HEVC):全てのApple Silicon Mac(8bit/10bit両対応)
  • ProRes:M1 Pro以降

デコード対応(動画を再生する)

  • H.264:全てのApple Silicon Mac
  • H.265(HEVC):全てのApple Silicon Mac
  • ProRes / ProRes RAW:全てのApple Silicon Mac
  • AV1:M3シリーズ以降(A17 Pro、M4含む)

Jellyfinのドキュメントによれば:

Starting with the M3 series, Apple Silicon-based Mac supports hardware-accelerated decoding of AV1 video. An Apple Silicon-based Mac is preferred in most cases. Even an entry-level M1 can handle three 4K 24fps Dolby Vision HEVC 10-bit transcoding tasks simultaneously while performing tone-mapping to SDR.

(M3シリーズから、Apple Silicon MacはAV1動画のハードウェアアクセラレーションデコードに対応した。ほとんどの場合、Apple Silicon Macが推奨される。エントリーレベルのM1でさえ、SDRへのトーンマッピングを行いながら、4K 24fps Dolby Vision HEVC 10bitのトランスコードを3本同時に処理できる。)

参照:https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/apple/

M1でも十分強力だが、M3以降ならAV1デコードも含めてフルスペックで使える。

また、Pro/Max/Ultraチップには追加のMedia Engineが搭載されている:

  • M1/M2/M3/M4(無印):1基のエンコードエンジン
  • Pro/Max:追加のエンコードエンジン搭載(4K 120fpsトランスコード対応)
  • Ultra:2基のデコードエンジン + 4基のエンコードエンジン

FFmpegでVideoToolboxを使う

さて、実際にVideoToolboxを使うにはどうすればいいか。

最も手軽なのは、FFmpegを使う方法だ。FFmpegはVideoToolboxに対応しており、コマンドラインから簡単にハードウェアエンコードができる。

基本的な使い方

# H.264でエンコード
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 6000k output.mp4

# H.265(HEVC)でエンコード
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -b:v 4000k output.mp4

ポイントは-c:vオプションでh264_videotoolboxまたはhevc_videotoolboxを指定すること。これだけでハードウェアエンコーダが使われる。

画質の調整

VideoToolboxでは、ビットレート指定(-b:v)または品質指定(-q:v)でエンコード品質を調整できる。

# ビットレート指定(推奨)
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -b:v 8000k output.mp4

# 品質指定(0-100、数値が大きいほど高品質)
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -q:v 65 output.mp4

注意:VideoToolboxは、ソフトウェアエンコーダ(libx264/libx265)で使える-crfオプション(定数品質モード)に対応していない。これが地味に痛いところだ。

プロファイル指定

# H.264 Highプロファイル
ffmpeg -i input.mp4 -c:v h264_videotoolbox -profile:v high -b:v 6000k output.mp4

# HEVC Main10プロファイル(10bit)
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -profile:v main10 -b:v 8000k output.mp4

10bit HDR動画のエンコード

ローカルAIで生成した高品質な動画を10bitで保存したい場合:

ffmpeg -i input.mkv \
  -c:v hevc_videotoolbox \
  -pix_fmt p010le \
  -b:v 20M \
  -tag:v hvc1 \
  output.mp4

-pix_fmt p010leで10bitピクセルフォーマットを指定し、-tag:v hvc1でAppleデバイスとの互換性を確保している。

ソフトウェアエンコードとの速度比較

実際どれくらい速いのか。

ある検証によると、同じ動画をエンコードした場合:

エンコーダ 速度 CPU使用率
libx264(ソフトウェア) 1x(基準) 100%
h264_videotoolbox 約2.7〜4x 約20%
libx265(ソフトウェア) 1x(基準) 100%
hevc_videotoolbox 約3x 約20%

Martin Riedl氏のブログでは:

In a direct comparison the videotoolbox variant is 4 times faster than the x264 software encoder. Similar results with h265 encoding: hevc_videotoolbox is here 3 times faster than the x265 software encoder. And: the CPU is not fully under load with the hardware encoder. Only 20% of my CPU is used instead of 100% for the software encoding.

(直接比較では、videotoolbox版はx264ソフトウェアエンコーダの4倍速い。H265エンコードでも同様で、hevc_videotoolboxはx265ソフトウェアエンコーダの3倍速い。そして、ハードウェアエンコーダではCPUがフル稼働しない。ソフトウェアエンコードの100%に対して、わずか20%しか使われない。)

参照:https://www.martin-riedl.de/2020/12/06/using-hardware-acceleration-on-macos-with-ffmpeg/

Luis Nell氏のブログでも:

Works beautifully with speeds from 1.4x to 2.7x, while only consuming 18w of power. That is incredibly low power draw.

(1.4x〜2.7xの速度で美しく動作し、消費電力はわずか18W。信じられないほど低い消費電力だ。)

参照:https://www.originell.org/til/ffmpeg-apple-hardware-accelerated/

ローカルAI生成と並行してエンコードを走らせても、システムが重くならない。これは大きい。

画質のトレードオフ

正直に言おう。VideoToolboxの画質は、同じビットレートならソフトウェアエンコーダに負ける。

これはハードウェアエンコーダ全般に言えることだが、速度優先で設計されているため、libx264/libx265のような精緻な圧縮アルゴリズムは使えない。

「同じ見た目の品質」を得るには、VideoToolboxのほうが高いビットレートが必要になる。

とはいえ、これは用途次第だ:

VideoToolboxが向いているケース

  • 生成AIの試行錯誤中(大量のプレビュー動画を素早く書き出したい)
  • リアルタイム配信・録画
  • バッテリー駆動での作業
  • 最終品質より速度優先の場面

ソフトウェアエンコーダが向いているケース

  • 最終納品物の書き出し
  • ファイルサイズを極限まで小さくしたい
  • 時間をかけてでも最高品質が必要

HandBrakeでも使える

コマンドラインが苦手なら、GUIツールのHandBrakeでもVideoToolboxが使える。

HandBrakeのドキュメントによれば:

If your computer is supported you will see one or more of the following video encoders added to the encoder control on the Video tab.

(お使いのコンピュータがサポートされている場合、Videoタブのエンコーダコントロールに以下のビデオエンコーダが追加されます。)

参照:https://handbrake.fr/docs/en/1.3.0/technical/video-videotoolbox.html

Videoタブのエンコーダ選択で「H.264 (VideoToolbox)」や「H.265 (VideoToolbox)」を選べばOKだ。

HandBrakeのGitHub Discussionでは、M1 Maxで330fps(1080p)というとんでもない速度が報告されている。

ローカルAIワークフローでの活用例

具体的にローカルAI環境でどう使うか、いくつかシナリオを考えてみよう。

シナリオ1:Stable Diffusion + AnimateDiffの出力を動画化

AnimateDiffが連番PNGを出力したとする。これをMP4に変換:

ffmpeg -framerate 8 -i frame_%04d.png \
  -c:v hevc_videotoolbox \
  -pix_fmt yuv420p \
  -b:v 10M \
  output.mp4

シナリオ2:CogVideoの出力を再エンコード

CogVideoが出力した動画を、より効率的なコーデックに変換:

ffmpeg -i cogvideo_output.mp4 \
  -c:v hevc_videotoolbox \
  -b:v 8M \
  -c:a copy \
  final_output.mp4

シナリオ3:大量の生成動画をバッチ処理

#!/bin/bash
for file in generated_*.mp4; do
  ffmpeg -i "$file" \
    -c:v hevc_videotoolbox \
    -b:v 6M \
    -c:a aac -b:a 128k \
    "encoded_${file}"
done

CPUを占有しないので、バッチ処理中も他の作業ができる。

よくあるトラブルと対処法

トラブル1:「Unknown encoder」エラー

Unknown encoder 'hevc_videotoolbox'

FFmpegがVideoToolbox対応でビルドされていない可能性がある。

Homebrewでインストールした場合は通常対応しているが、確認するには:

ffmpeg -encoders | grep videotoolbox

h264_videotoolboxhevc_videotoolboxが表示されればOK。

トラブル2:色がおかしくなる

特にHDR動画やYUVの扱いで色がずれることがある。

# 色空間を明示的に指定
ffmpeg -i input.mp4 \
  -c:v hevc_videotoolbox \
  -color_primaries bt709 \
  -color_trc bt709 \
  -colorspace bt709 \
  -b:v 8M \
  output.mp4

トラブル3:画質が低い

VideoToolboxはデフォルトで速度優先の設定になっている。ビットレートを上げるか、-q:vオプションで品質を指定しよう。

# 高品質設定
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -q:v 75 output.mp4

まとめ

VideoToolboxは、Apple Silicon Macに搭載されたハードウェアエンコーダ/デコーダを呼び出すフレームワークだ。

ローカルAI勢にとってのメリット

  • エンコード速度が3〜4倍速い
  • CPU使用率が20%程度に抑えられる
  • 消費電力が大幅に削減
  • AI生成と並行しても快適に動作

対応コーデック

  • エンコード:H.264、H.265(HEVC)、ProRes(Pro以上)
  • デコード:上記 + AV1(M3以降)

使い方

  • FFmpegで-c:v h264_videotoolboxまたは-c:v hevc_videotoolbox
  • HandBrakeのエンコーダ選択で「VideoToolbox」を選ぶ

注意点

  • 同ビットレートならソフトウェアエンコーダより画質が劣る
  • CRF(定数品質)モードは使えない
  • 最終納品物には向かない場合も

ローカルでStable DiffusionやCogVideoを動かして、生成した動画を素早くMP4に書き出したい。そんなときVideoToolboxは強力な味方になる。

Apple Silicon Macの隠れた実力、ぜひ活用してみてほしい。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?