L-SMASH Works r141 更新(r150追加)

2012/04/17:
r150へ更新。Libav Reader の追加、ランダムシーク時のデコード処理変更、m2ts の LPCM 対応など。詳しくはこちら

2012/04/13:r142へ更新。修正内容は異なるソースファイルの連結に対するものです。

音声のみの編集を可能にするダミー映像生成機能を追加

 今回行われた多数のコミットは、AviUtl に音声のみを読み込む(*1)ためのダミー映像機能を追加したのがメインで、これにより音声ファイルのみを編集して出力することが可能となりました。AviUtl 標準搭載の Wave File Reader にもダミー映像機能(*2)はありますが、wav ファイルしか読み込めないため、L-SMASH Works が対応する多数の音声フォーマット読み込み・編集・出力が可能になったのは非常に便利といえます。

(*1)AviUtl は映像ありきのソフトウェアであるため、基本的に映像がない状態で音声ファイルのみを読み込むことはできない
(*2)Wave File Reader には音声ファイルのみの編集に対応すべくダミー映像機能(黒ベタの映像生成機能)が実装されている

例えば、m4a な AAC 音声を L-SMASH Works(lsmashinput)で読み込み、カットするなりした編集結果を L-SMASH Works の Libav-SMASH Muxer で m4a なまま出力すると、無変換(無劣化)で編集結果を出力できます。wav でないと読み込めないがゆえに、AAC を wav に偽装するといた処理が必要が無く、AviUtl 上では PCM にデコードされたデータとして扱うため、再生ウインドウでの音声プレビューも正常に行うことができます(L-SMASH 対応コンテナである場合、Libav-SMASH Muxer での出力時に編集結果を反映させるかたちで元データをストリームコピーする)。ただし、音量変更など音声にフィルタリングを適用した場合、その限りではありません。

ダミー映像の設定方法と音声の編集精度を上げるテクニック

 ダミー映像は、ファイル → 環境設定 → 入力プラグインの設定 → Libav-SMASH File Reader で行います。ダイアログには右のように「Dummy resolution」と「Dummy flamerate」の設定項目があり、Dummy resolution でダミー映像の解像度(横×縦)を、Dummy flamerate でダミー映像のフレームレートを指定します。

  • Dummy resolution
  •  音声波形表示やタイトルバーのステータス類の見やすさを考慮し、横に広く縦に狭く解像度を指定したほうが編集しやすい。例えば 1280x32 など。32というのは AviUtl が扱える最低解像度ですが、Libav-SMASH File Reader で32以下を指定しても、32として読み込まれます(ただしエラーは出ない)。ステータスバーにはフレーム番号と時間を表示しておけば、フレームベース・タイムベースの両方で音声編集・確認ができ便利。
  • Dummy flamerate
  •  もしも、映像と併せて扱う事を前提とした音声であれば、映像と同じフレームレートを指定するのが無難ですが、音声のみを読み込んで編集する利点のひとつとして、ダミー映像のフレームレートを上げることで音声の編集粒度を細かくし、精度を上げることができます。

    例えば、24fpsベースの映像用音声を10倍の240fpsでダミー読み込みすると、24fps読み込みの10倍の細粒度で編集ができますし、極端な事をいえば 48KHz の音声を 48000fps で読み込むと 1フレーム = 1サンプル となり、音声を1サンプリング単位で編集することもできます(AviUtl は映像1フレーム単位での編集が基本であるため)。これらは、 wav(PCM)系の音声を編集するテクニックとして特に役立つため、AviUtl 標準の Wave File Reader よりも高精度な編集を強いられるケースで実践すると良いかもしれません。

    ただし、総フレーム数が半端無く増えるため、システムの設定で最大フレーム数をかなり大きく設定しておく必要があり、48KHzで90秒ジャストの音声ファイルを48000fpsで読み込むと、4320000フレームを必要とします。

    追記:r150 における追加機能について


    ↑24bit LPCM音声のM2TSファイルを読み込んだ例。このように LPCM も正常に展開できるようになった。

     L-SMASH Works は将来的に FFMS(ffmpegsource)Reader の廃止を計画しており、その第一弾として Libav Reader を実装しました(r143)。これにより FFMS を使用せず Libav がサポートするフォーマットのアクセスが可能となり、FFMS の不具合等を回避しつつ Libav が対応するフォーマットをより幅広く扱えます。

  • Libav Reader が FFMS Reader よりも優れている一例
  • TSのフレームアキュレートなアクセスが可能(*3)
    ・M2TS に格納された LPCM を読み込める

    (*3)M2TSについては正常にシークできていない可能性があるとのこと
     

  • Libav Reader 今後の改善点
  • ・先頭フレームが正常にデコードできなかった場合、不正な映像が AviUtl へ渡されるため緑一色のフレームになる
    ・VOB など一部のコンテナフォーマットでフレームレートを正常に取得できない事がある

    また、23.976PsF、29.97PsF(*4)収録といった 59.94i 表示(3-2プルダウン等)を実現するための RFF フラグには未対応ですが、プログレッシブ扱いで収録されているストリームをいちいちインタレースで展開して編集するケースは稀であるため、これについてはそれほど不自由がないはずです。

    (*4)PsF(Progressive segmented Frame)とは、各フレームをプログレッシブ扱いでエンコード・RFFフラグを付けて格納しつつ、デコード時に 59.94i といったインタレース変換(プルダウン)をする仕組み。格納は23.976fpsや29.97fpsといったプログレッシブなフレームであるため、プルダウンフラグを無視すればプログレッシブフレームのまま展開でき、テレビなどの 59.94i といったインタレースメディアで扱う・表示する場合はRFFフラグによりプルダウン処理されてインタレース表示に至る。主に BD や DVD 収録で利用されている。

  • Forward htreshold とは
  •  r149で追加された Forward htreshold は muken氏が Twitter で説明されています。おそらく、設定した前方フレーム数を先読みデコードする機能かと思われます(スレッショルド数だけバッファを取って前方向フレームをデコードしておくため、前方には超高速シークができるケースが多い。その代わり、数が大きくなるとその分メモリも消費する)。
    muken氏から指摘があり、正しくは「ランダムアクセスしたフレーム間が設定範囲内であれば、キャッシュされているフレームからデコードして余分な処理を省く」のが狙いであり、ランダムシークの度にキーフレームからいちいちデコードしようとせず、Forward htreshold の設定範囲内にデコードしたフレームがあればそこから即デコードを開始してデコード時間短縮を試みる機能です(キーフレーム間隔の長い映像ほど効果が出やすいかもしれません)。これは Libav-SMASH File Reader の設定ダイアログで指定します。

  • 今後の L-SMASH Works
  •  r148 以降については、FFMS Reader を使うメリットが殆ど無い(むしろ Libav Reader のほうが正常に読み込めるケースが多い)という動作検証から、強制的に FFMS Reader を無効化しました。ビルド時に FFMS を無効化してしまうと Libav Reader も動作しなくなるため、FFMS を有効化してビルドしつつ、設定上で FFMS を強制無効化して Libav+L-SMASH Reader の次に Libav Reader が使えるようにしてあります。muken氏も FFMS Reader の削除を考えていることから、遅かれ早かれ FFMS Reader は姿を消すことになるでしょう。

    RFF については対応を予定しており、FFMS Reader に絡むビルド仕様についても FFMS Reader の削除と同時に解決されると見られます。
    # 情報引用:muken氏の呟きより
    # 課題2と3は r148 での avcodec_decode_audio4 対応を通じてクリアーされています

    AviUtl プラグイン「L-SMASH Works」ダウンロード

    最新版は左上にあるメニュー「バイナリを選択」から取得できます(以下のバイナリはかなり古いため使用を推奨しません)。

  • L-SMASH Works プラグイン r141
  • L-SMASH Works プラグイン r142
  • L-SMASH Works プラグイン r150
  • r141ソースコード
  • r142ソースコード
  • r150ソースコード
  •  

  • リンク
  • AviUtlのお部屋
    VFR-maniac/L-SMASH-Works
    l-smash - A simple tool for mp4. - Google Project Hosting
    Get ffmpeg(L-SMASH Worksの推奨ライブラリは Libav)
    ffmpegsource

    L-SMASH Works 今後の課題(muken氏の呟き)

    コメントを残す

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

    1 × 1 =