エントリー

x265のAppleM1対応はどうにかならんのかい

 2020年末にAppleSilicon(AppleM1)を搭載したMacBookAirを購入して,その性能とバッテリライフに心底驚いたわけですが,大きく期待を裏切るものがffmpegによるH.265のエンコード性能の低さでした。

 H.265もだいぶこなれてきましたし,フルHDのMPEG2のトランスコードのパフォーマンスも,実時間の5倍10倍は無理としても,2倍程度は出てくれるだろうと思っていたところ,まさかの0.7倍という実時間を下回る速度でした。

 Rosetta2によるIntelエミュレーションの方が実時間近く出ていたので,ARM64のネイティブでこれっていうのは,Rosetta2の優秀さを示すものであると同時に,x265のARM対応の悪さを示していて,ここまでひどいとさすがにすぐに改善されるだろうと思っていました。

 そもそもM1にはH.265のハードウェアアクセラレータも搭載されているので,これを使えば10倍20倍も夢じゃないとワクワクしていただけに,この期待外れは強烈なものでした。おそらく私だけではなく,世界中の多くの方がそう思ったことでしょう。

 2023年1月現在,未だに未対応のままです。

 結局うちでは,2016年モデルのMacBookProというインテルCPU(2.6GHz)のエンコードが最も高速で,上記と同じ条件だと1.6倍くらい出てくれるので,インテルMacはまだまだ捨てられないなあと言う結論になっています。

 このうち,ハードウェアアクセラレータについては早い段階で使う方法が明らかになっているのですが,高速である代わりに画質がひどく,実質的に使い物になりません,ここで世界は2度目のがっかりを経験することになったのです。

 Rosetta2によるインテルエミュレーションの方が高速というおかしな事が起こるのは,x265のARMのSIMD拡張命令セットへの未対応が原因でしょう。NEONは,SIMDという命令の通り複数の計算を一撃でこなすもので,行列計算に威力を発揮します。これがないと一々計算のための命令を記述しないといけないわけで,それだけで数倍の差がつくことは自明でしょう。

 聞けば2.5倍程度高速化されるという事ですので,ようやくうちのインテルMacに並ぶことになります。クロックはM1の方がずっと高速ですので,M1にも苦手なものがあるんだなあと思うのですが,この時に必要な電力がまさに桁違いですので,やはりM1の優秀さは変わりません。

 さて,そうなってくると私もNEON対応のx265を試したいじゃないですか。

 これまでは,組み込み済みのバイナリを取ってくるか,自分でビルドをしないとダメだったのですが,私はAACのエンコードにfdk-aacを使っているので,どうしてもソースからビルドしないといけません。

 かといってスタティックビルドなんていう面倒な事をやる気もなく,Homebrewで対応してくれることをずっと待っていたのでした。

 x265のM1のNEONパッチはAppleから出ているそうなのですが,いろいろ事情があってHomebrewでの正式なリリースには組み込めずに長い時間放置されているとのことで,実は昨年秋頃に一度だけ組み込まれた事があったそうです。その後現在はまた外されてしまったようですので,私はこのタイミングを逃していたことになります。

 ですが,Homebrewかつ,fdk-aacが組み込める形で,NEONパッチがx265に適用できる簡単な方法が分かったので,ここにメモしておきます。本当に簡単です。

(1)まずこれまでのx265をアンインストールする。
brew uninstall --ignore-dependencies --force x265

(2)次に以下をエディタでひらく。
/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/x265.rb

(3)このうち,
head "https://bitbucket.org/multicoreware/x265_git.git", branch: "master"
という行を探して,以下に入れ換える。
head "https://bitbucket.org/multicoreware/x265_git.git", revision: "0b75c44c10e605fe9e9ebed58f04a46271131827"

(4)x265をインストールする。
brew install --HEAD x265

(5)もし元に戻したいなら,編集箇所を元にもどしてから,
brew install homebrew-ffmpeg/ffmpeg/ffmpeg --HEAD


 たったこれだけです。これで特別なオプションを付け足すこともなく,x265がNEONに対応して2,5倍ほど高速にエンコード出来るようになります。

 先程の条件だと,実時間の0.7倍から1.7倍程度に,2.4倍ほど高速化されました。

 NEONの効能はこんなもんではないはずで,もっとコードを最適化すればさらに高速化されると思うのですが,今のところはこの程度です。ようやく7年前のインテルCPUに速度的には並んだというのが情けないなと思うのですが,繰り返すようにこれがファンレスで動いていることがすごいと思います。

 はやくNEONへの対応,そしてM1およびM2への最適化をして欲しいなと思います。

 

ページ移動

ユーティリティ

2026年01月

- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed