超優秀なAV1エンコーダーをMacのKdenliveで使おうと試行錯誤した結果です。
環境
M2 Mac mini (macOS 14.4 - Homebrewインストール済み)
そもそもの話
なんで一部のLinuxディストリビューションだとエンコーダーにlibsvtav1
が指定できるのにWindowsやらMacだとできないんだという話ですが、これはエンコードを行なっている本体であるMeltのビルドオプションが原因です。
ffmpegのようにビルドオプション次第で使えるエンコーダーが変わります。aptやらdnfやらを使っているLinux環境ではこのmeltは依存関係として公式のパッケージリポジトリから自動的にインストールされます。
つまりディストリビューションのリポジトリのパッケージ管理人がビルドオプションで--enable-libsvtav1
みたいなオプションを付けていればMeltはSVT-AV1でエンコードできるようになる訳です。
macOS環境ではMeltはKdenlive本体に同梱されているものをデフォルトで使用します。残念なことにこの同梱されているMeltは(恐らくビルドオプションの関係で)libsvtav1
をエンコーダーに指定することができません。
つまりKdenliveにenable-libsvtav1
なMeltを使わせれば全て解決する訳です。
SVT-AV1を使えるMeltをインストールする
自力でビルドする必要があるかと思ってましたがありがたいことにbrew install mlt
でインストールされるMeltはちゃんとlibsvtav1が有効になった状態で配布されています。
そしてKdenliveにはツールバーのKdenlive→Preferenes→Environment
に使用するMeltのパスを設定する項目があります。
KdenliveにHomebrewでインストールしたMelt(/opt/homebrew/bin/melt
)を使わせればめでたくSVT-AV1でレンダリングできるようになります。やったね!
M1以降の環境だと追加の手順が必要
設定項目は確かに存在しますが、これには罠があります。実はKdenliveはM1などのArmアーキテクチャのCPUに対応していません。Rosettaを使って動いている訳ですがRosettaからArmで動くMeltのバイナリを呼び出すことはできません。ArmなMacでこの設定項目を/opt/homebrew/
下のものにしても起動時にフォールバックして元に戻ってしまいます。若干めんどくさいですがレンダリングスクリプトを吐かせて手動でmltコマンドを呼び出してレンダリングすることで解決します。
Step1: レンダリングスクリプトを保存
内臓のMeltでも扱えるコーデックをとりあえずダミーで指定してレンダリングスクリプトを吐かせます。
以下の内容の仮のレンダリングプロファイルを作成します。
ab=%audiobitrate+'k' acodec=libopus ar=48000 channels=2 crf=30 f=webm strict=experimental vcodec=libaom-av1
適当な名前で保存し選択した状態で"Generate Script"をクリックします。名前を聞かれるので適当に入力して保存します。
Step2: 手動でレンダリング
~/Movies/kdenlive-renderqueue
にそれっぽい名前で拡張子が.mlt
のファイルが入っていると思います。
適当なテキストエディターで該当ファイルを開き仮に指定したlibaom-av1
をlibsvtav1
に置き換えます。
<consumer f="webm" channels="2" crf="30" target="/Users/nexryai/Movies/3.25.webm" mlt_service="avformat" ar="48000" real_time="-1" threads="2" ab="0k" vcodec="libaom-av1" strict="experimental" acodec="libopus" in="0" out="10752"/>
↓↓↓
<consumer f="webm" channels="2" crf="30" target="/Users/nexryai/Movies/3.25.webm" mlt_service="avformat" ar="48000" real_time="-1" threads="2" ab="0k" vcodec="libsvtav1" strict="experimental" acodec="libopus" in="0" out="10752"/>
ターミナルを開いて手動でmltコマンドを呼び出してレンダリングします。
nexryai@M2-Mini ~ % /opt/homebrew/bin/melt -progress <PATH_TO_MLT_FILE>
まとめ
最近のMacは全部Armなのでいい加減KdenliveさんはApple Siliconに対応してください。お願いします。