Libav+L-SMASHの推奨設定
この記事での結論
快適に使いたいユーザーはLibav+L-SMASHをオフにすることを推奨します
詳細説明
今まで、民間療法的に
Libav+L-SMASHをオフにするとバグが減る
Libav+L-SMASHをオフにしたほうが軽くなる
とか伝わってきたわけですね
このようなことが言われるのは主に
規格違反ファイルの存在
L-SMASHは必ずしも効率的ではない
によるものです
まず「Libav+L-SMASH」と「LW-Libav」とは何かL-SMASH WorksのREADME.jaより引用します。
+ Libav+L-SMASH : チェックボックス (デフォルト値 : 有効)
チェックがされている場合、L-SMASHをdemuxerとして、libavcodecをデコーダとして、入力ファイルの読み込みに使用します。
ー 中略 ー
+ LW-Libav : チェックボックス (デフォルト値 : 有効)
チェックがされている場合、libavformatをdemuxerとして、libavcodecをデコーダとして入力ファイルの読み込みに使用します。
つまり、「Libav+L-SMASH」と「LW-Libav」ではdemuxerが異なり、
Libav+L-SMASH → L-SMASH
LW-Libav → libavformat
です。(libavformatはFFmpegのdemux用ライブラリみたいなものです。)
続いて、L-SMASHとは何であるかをより引用します。(下に重要なポイントをまとめたので、読み飛ばしてもいいです) L-SMASHはISO Base Mediaファイルフォーマット及びMP4を含むその派生ファイルフォーマットを扱うクロスプラットフォームのライブラリです。
ー 中略 ー
巷には既にいくつかのオープンなMP4/MOVの実装が存在するにも関わらず、L-SMASHプロジェクトは開始しました。
当初はx264のMP4 muxerのみを想定していましたが、その後展望が広がり、現在では汎用のMP4ツールとなるべく実装が進んでいます。
開発の契機は、既存のオープンソースの実装が大きく、複雑すぎること、そして規格上誤った実装が多いことから、自分たちで真っ当な実装を行おう、と思い立ったことにあります。
このため、L-SMASHは以下のような基本コンセプトを持っています。
・一般に動画コンテナとして重要な機能のみを実装する。
・素直でシンプルに実装する。
・可能な限り規格に忠実に実装する。
MP4は非常に多種多様な表現を内包することのできる、高機能なコンテナ形式です。
しかし、L-SMASHでは2D/3Dグラフィックスやインタラクティブコンテンツ等をサポートしません。
現状の動画コンテナとして一般に重要ではなく、実装を過度に複雑にする機能を排除し、シンプルにしています。
L-SMASHのソースコードは必ずしも実行時の効率が良くはなっていません。多少効率が悪くとも、正しく、かつ規格と実際の動作の理解が容易なコードにしています。
ここで重要なポイントは
・可能な限り規格に忠実に実装する
必ずしも実行時の効率が良くなっていません。
の2点です。
つまり、
規格に忠実であるため、規格違反ファイルに対して柔軟ではない
必ずしも実行時効率が良くないため、ユーザーが重いと感じることが高くなる
というのがLibav+L-SMASHとなるわけです。
よって、
どのような動画でもいい感じに読み込んでもらいたい
できるだけ快適に動画編集をしたい
と考える場合は、Libav+L-SMASHをオフにした方がよいと考えられます。
ただ、
Libav+L-SMASH有効時に正常に読み込めないファイルについては規格に準拠していない可能性が高い
LW-Libavはどのような動画でも正常に見えるようにするため、読み込み結果が正確でない可能性がある
を覚えておいてください。
最初に書いた結論について
規格違反ファイルを吐き出すような機器やソフトウェアが悪いが、ユーザーは知ったこっちゃないということが多い
Libav+L-SMASHで正常に読み込むことができない動画は大抵の人間がFFmpegやHandBrakeなどで変換をしてから再読み込みを試す。であれば、LW-Libavで読み込んでもさほど変わりないはずである。
Libav+L-SMASHはLW-Libavに対し、実行時効率の悪さが顕著に出ているため、反論ができない (ここはどうにかするべき)
といった主観も入っています