L-SMASH および Libav ライブラリを使用した AviUtl 入力プラグイン・ライブラリ「lsmashinput」を VFR-maniac(muken)氏が先日公開しました。seraphy氏作の「MP4 File Reader」に代わるMP4(mov等)コンテナファイルリーダーとして注目されるプロジェクトです。

AviUtl Plug-in SDK に MIT License が適用された事をうけ、「lsmashinput」をビルドした「Libav-SMASH File Reader」を公開するに至りましたが、一点だけ改良を加えてあります。

改良点
  • フルレンジの MPEG-4/AVC H.264 ストリームをスケール変換しないようにした
  • これは Libav(ffmpeg) 側の実装であり、オリジナルではフルレンジ(PCスケール)のH.264をTVスケールに問答無用で圧縮変換して渡しますが、AviUtl で「編集する」という用途を考慮すると、映像ストリームのスケールを勝手に変換されるのは芳しくありません。そこで、フルレンジなH.264をスケール無変換でデコード・ポストプロセスするよう修正してあります。

    これにより「ありのまま」の状態で映像データを取得でき──

    ■フルレンジのまま編集・出力
    ■プラグインフィルタ(拡張色調補正など)でTVスケールへ変換して編集・出力
    ■H.264ストリームの格納レンジをチェック

    といった処理手法のフレキシビリティを確保しています。

    もちろん、TVスケールな MPEG-4/AVC H.264 ストリームはスケール無変換で(TVスケールなまま) AviUtl に渡されます。これはオリジナルと同様です。

  • フルレンジアクセスの一例
  • ↑「ましろ色シンフォニー」OPより、このシーン(同一フレーム)をサンプルとして拝借。実際は1280x720の映像で、フルレンジYUV420変換してからエンコードされている(このスクリーンショットはRGBストレート変換されたもの)。
    ↑波形表示プラグインを使い、横1280の波形データを720ラインすべて拾った。白がY、赤がU、青がV成分。縦方向がデータのスケールで、下が0、上が255である。オリジナルのLibavを使うと、Yが16-235の間に圧縮変換されてしまっているのがわかる。
    ↑Libavを修正してスケール変換を無効化したもの。見てのとおり、Y16以下235以上にあるデータがそのままAviUtlに入力されている。このように、フルレンジを無変換で扱える(見られる)ため、映像ストリームの格納状態や画質チェックにも使え、スケール変換による読み込み劣化がない。ただし、AviUtlはTVスケールを基準としてYC48にマッピングしているため、プレビュー表示される映像は白飛び・黒つぶれして見えるが、データがクリップされているわけではない。

    注釈:
    オリジナルの Libav(ffmpeg) の挙動は、視聴といったRGB色空間変換を前提とした処理において間違いではなく、フルレンジをどう処理すべきかは考え方次第です。Libav の実装は「YCbCr/YPbPr(YUV)ならTVスケールに合わせてからRGB色空間変換時にYC伸張すれば良い」という真っ当な考え方ですし、一方で「YCbCr/YPbPr(YUV)がフルレンジなら、それを保持したほうが階調損失しないうえに、データもそのまま見られ、RGB色空間変換するにしてもストレート変換すれば良い」という考え方もあります。AviUtlで編集する用途(意味)を考慮した場合は後者のほうが良いだろうというだけで、Libav(ffmpeg)の実装が間違っているわけではありません。

    なお「Libav-SMASH File Reader」の詳細はアーカイブ内の Readme.txt をご覧ください。

    ダウンロード
    Libav-SMASH File Reader プラグイン(r17)
    Libav-SMASH File Reader ソースコード

  • リンク
  • AviUtlのお部屋
    VFR-maniac/lsmashinput - GitHubl-smash - A simple tool for mp4. - Google Project Hosting
    Get ffmpeg

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    × 5 = 35

    This site uses Akismet to reduce spam. Learn how your comment data is processed.