Q. LSWで読み込む際に軽いメディアファイル形式は何?A. 不明です。
この記事を書いたきっかけ
ビットレートの高さや、AVCやHEVC、AACやMP3などのコーデックの違い、MP4やMKV等コンテナファイルの違いによって読み込む時間、読み込んだ後のかくつき具合は変わりますか?
A. 変わります。
また、変わる場合に早いのはどの組み合わせですか?
A. 不明です。
詳細には
環境によって違うため、一概には言えない。
デコーダーなどは性能向上が日々なされているため、変動する可能性がある。
などです。
より詳細な説明
メディアファイルの読み込みには、さまざまな要素が関わっています。
簡単に考えられるだけでも、以下のような多くの変数があります。また、1つの変数として紹介しているものでも、内部では複数の変数が存在する可能性があります。例も挙げます。
1. コンテナ形式
ファイルの一番前に全てのアクセス情報が書かれているファイルだと、初回読み込み時に速そう。
2. デマルチプレクサ
LSWではLibav+L-SMASHかLW-Libavのどちらを用いるかで速度が変わる。
これは一般的にLW-Libavの方が速いと言われています。
3. コーデック形式
AV1の方がAVCより計算量が多いため、デコード速度が遅い。
4. デコーダー
VP9でもlibvpxを用いてデコードをすると多少遅い。FFmpeg内蔵のvp9を用いると速いが、透過情報に対応していない。QSVやNVDECではGPU内部でのデコード自体は速いが、CPU<->GPU間の転送が入るため、メモリの速度に左右される。(QSVならZeroCopyの可能性ありそう?)
AV1はCPUを用いないとデコードが不可能であり、比較的遅かったが、QSVやNVDECでのHWデコードが可能となり、高速化された。
5. プロファイル・レベル
同じAVCでも複数のプロファイル(使用可能な方式を定義するもの)が存在し、それにより速度が左右される。
6. CPU
PC(1)のCPUではAVX2を用いることができるため、コーデック(1)の方が速くデコード可能である。しかし、PC(2)では使えないため通常通り演算することとなる。よって、PC(2)ではコーデック(2)の方が速くデコードできる。
PC(3)のCPUのドライバーv1.0ではAVX-512が使用できる。しかし、同一CPUを積んでいるPC(4)は脆弱性修正のためドライバーをv1.1に更新している。その脆弱性修正により、PC(4)ではAVX-512が無効化されており、デコード速度が遅い。
7. ビットレート・補助記憶装置(HDD, SSD)の転送/アクセス速度
PC(5)のデータ用HDDはアクセス速度が非常に遅い。よって、多少演算に時間が掛かろうがHDDからの読み出しが少ない方が速い。よって、高圧縮設定で圧縮したファイルサイズが小さいものの方が速い。
8. 主記憶装置の転送/アクセス速度
PC(6)はメモリの速度が速いが演算速度が遅い、PC(7)ではメモリ速度が遅いが演算速度が速い。コーデック(3)はデコードするための演算回数が少ないが、より多くのメモリアクセスを必要とする。コーデック(4)はデコードするための演算回数が多いが、より少ないメモリアクセスで済む。よって、PC(6)ではコーデック(3)の方が速く、PC(7)ではコーデック(4)の方が速い。
InputPipePluginの「共有メモリ・名前付きパイプ」設定では、共有メモリのほうがメモリ確保回数が少なく済むため速い
前にnazonoSAUNA氏(記憶違いなら、申し訳ない)が言及されていた、「AviUtlにパッチを当て、共有メモリを用いてInputPipePluginからAviUtlに直接コピー」が可能になれば、メモリコピー回数が減り、速くなる(2024/10/07では機能案のみです。実装はされていません。)
etc…