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.976fps、29.97fps 収録の映像を 59.94i 表示(3-2プルダウン等)するための RFF フラグには未対応ですが、プログレッシブ扱いで収録されているストリームをいちいちインタレースで展開して編集するケースは稀であるため、これについてはそれほど不自由がないはずです。

  • 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 プラグイン r150
  • r141ソースコード
  • 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. r142だと読み込めるけど、r150だと読み込めないmkvがありました。なにが原因なのか、当方では検証できませんでした。

      jun1
    2. > jun1さん

      わかればで宜しいのですが、読み込めないmkvコンテナ動画の映像と音声コーデック、チャプタの有無など、ファイルの仕様をお知らせいただけると助かります。

      # できる限り同様のファイルを作って検証しますので

      追記:
      処理は出来るもののエラーが出るパターンは確認できました。
      現在のリビジョンでは問題ないため、大きな不具合がないことを確認のうえ、バイナリを公開予定です。

      POP
    3. はじめまして。プラグインありがたく使わせて頂いております。
      既に報告済みの内容と同じかもしれませんが、
      lsmashinput.auiとds_input.auiが入っている状態で、
      lsmashinput.auiの方が優先順位が上位の時にWMVやAVIを読み込むと以下の様なエラーが出ます。

      アドレス”0x65bf208c”で例外”0xc0000005″が発生しました

      発生モジュール : lsmashinput.aui
      オフセットアドレス : 0x0003208c
      備考 : INPUT_PLUGIN_TABLE::func_open() [Libav-SMASH File Reader]

      処理を継続すれば正常にds_input.auiで読み込めますし、順位を変更すれば問題ないのですが、
      r17やr142ではエラーが発生しないので一応ご報告致します。

      使用環境は
      Windows7 64bit
      Core 2 Quad Q6600
      です。

      azazel
    4. 無事解決しました。
      素早い対応ありがとうございます。
      ありがたく使わせて頂きます。
      これからも頑張ってください。

      azazel
    5. お返事、遅くなりました。真空波動研で見た範囲でしか答えられません。1920×1080 10Bit AVC/H.264 High 10@5 Unspecified 23.98fps 0f 40000.00kb/s
      FLAC 48.00kHz 16Bit 2ch
      Chapter(13)
      [Matroska] 00:40:42.440 (2442.440sec) / 1,123,871,954Bytes

      1920×1080 8Bit AVC/H.264 High@4.1 Unspecified 23.98fps 34097f 8753.27kb/s
      AAC 48.00kHz 2.0ch(2/0 L+R) HE(LC) 192.00kb/s
      [Extra][2]
      MP4 Base Media v1
      MetaData
      [MPEG4] 00:23:42.164 (1422.164sec) / 1,590,907,429Bytes
      の2種類がありました。

      jun1

    コメントを残す

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

    5 × 4 =

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください