先日リリースされた「Libav-SMASH File Reader」に続き、出力用のプラグイン「Libav-SMASH Exporter」もリリースされました。Libav-SMASH File Reader で読み込んだ MP4/MOVコンテナ等の映像・音声を無劣化(ストリームコピー)でエクスポートします。

なお、Libav-SMASH File Reader も更新しました(Libav-SMASH Exporter とセットになっています)。

使い方
lsmash_export.auf ファイルを AviUtl のフォルダ、もしくは AviUtl 直下の Plugins フォルダにコピーします。AviUtl を起動し、[その他]→[プラグインフィルタ情報]を開き、Libav-SMASH Exporter が表示されていれば導入完了です(出力プラグインではない点にご注意ください)。

あとは編集したいファイルを Libav-SMASH File Reader で読み込み、[ファイル]→[エクスポート]→[Libav-SMASH Exporter]で出力します。出力時はファイル名にコンテナの拡張子を入力するか「ファイルの種類」で選択してください。

また、編集用途でなくても、Libav-SMASH File Reader で読み込んだファイルをそのまま Libav-SMASH Exporter で別形式のコンテナとして出力する用途にも使えますので、MP4からMOVに入れ替えるといった操作も AviUtl の GUI で簡単に行えます。
# この件について開発者のVFR-maniac(muken)氏より指摘(*comment)があり、L-SMASH はストリームコピーをするだけであってコンテナフォーマット変換は今のところ実装していないとのことです。

編集時にキーフレームを確認する
↑[表示]→「ソースファイルのキーフレーム表示」を有効化すると、現在のフレームがキーフレーム(Iフレーム/Iピクチャ)の場合、フレームナンバー表示の右側にアスタリスクが表示される。MPEG系ストリームの場合、アスタリスクが表示されるフレーム単位での書き出しになる点を考慮しておこう。

Libav-SMASH File Reader/Exporter で扱う映像ストリームがMPEG系の場合、編集結果のファイル出力は「キーフレーム単位」となります。これはMPEG系ストリームを再変換せず扱う上での制限であり、Libav-SMASH File Reader/Exporter の不具合や機能制限ではありません。キーフレーム以外のフレームでカットや範囲選択を行った場合、Libav-SMASH Exporter は近くのキーフレームをサーチして、そこから出力します。ゆえに、MPEG系ストリームでは1フレーム単位での正確な編集・出力は難しい点をご留意ください(すべてIフレーム/Iピクチャの映像ストリームであれば話は別ですが)。

なお、AviUtl でキーフレームを確認する方法として「ソースファイルのキーフレーム表示」という機能があり、これを有効にするとタイトルバーのフレームナンバー右にキーフレームのステータス(アスタリスク)を表示させることが可能です(詳しくは右の画像とキャプションを参照)。

「次(前)のキーフレームに移動」(編集→基本機能にある)をショートカットキーとして登録しておくと、MPEG系コーデックの場合は編集が捗るかもしれません。

追記(2011/12/11):
QuickTime やその系統の splitter/demuxer である場合、エクスポート開始フレームがキーフレームでなくても選択開始フレームからの再生に対応しており、これはMP4やMOVに実装されている edit list を利用して「ここから(選択開始フレームから)再生しなさい」と情報を指定しているためです(つまり、データそのものはキーフレームからの出力だが、再生開始フレームを別途指定できる)。これも VFR-maniac(muken)氏より追加情報としてコメントをいただきました。

ダウンロード
今回より、Libav-SMASH File Reader と Libav-SMASH Exporter をセットにしてあります。ともに、その次点での最新バイナリですので、両方セットでの更新をお薦めいたします。
  • AviUtl プラグイン Libav-SMASH File Reader(r21) / Libav-SMASH Exporter(r7) セット
  • ソースコード
  • *現時点では追加読み込みによるストリーム結合書き出しができません

    なお、先日公開した Libav-SMASH File Reader も更新され、フルレンジのスケール変換問題が Libav-SMASH File Reader 側でクリアーされています(私は Libav 側のデコーダでフルレンジフラグ判定を無効化したが、Libav-SMASH File Reader の更新はフルレンジで渡される場合のピクセルフォーマットを無効化することで対処。結果、同じ挙動となっており、当方の記事で気付かれた方がパッチを提出されたようです)。

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

    VFR-maniac/lsmashexport - GitHub

    1件のコメント

    1. >また、編集用途でなくても、Libav-SMASH File Reader で読み込んだファイルをそのまま Libav-SMASH Exporter で別形式のコンテナとして出力する用途にも使えますので、MP4からMOVに入れ替えるといった操作も AviUtl の GUI で簡単に行えます。

      いえ。出来ません。コンテナの変更はできません。
      何故なら、コンテナによってCODEC specificなデータの格納方法が違う場合があるので、変更するにはそれらを適切な形に変換する必要があり、そして、L-SMASHはその変換を実装していないからです。
      L-SMASHはそれらを単純にコピーするだけです。

      muken
    2. >キーフレーム以外のフレームでカットや範囲選択を行った場合、Libav-SMASH Exporter は近くのキーフレームをサーチして、そこから出力します

      そこから出力はしますが、MP4やMOVで実装されているedit list (edts/elst)を使用して、選択開始フレームから表示しろというような命令をコンテナに残します。
      QuickTime及びその系列のdemuxer/splitterならば、再生時には正しく選択開始フレームから表示するはずです。

      と説明を付け足してみる。

      muken
    3. > 変更するにはそれらを適切な形に変換する必要があり、そして、L-SMASHはその変換を実装していないからです。

      ということは、ストリームをストレートにコピーしただけであって、異なるコンテナを指定してもソースコンテナのフォーマットを維持しているというわけですね。ソースコンテナ以外をエクスポート時に選択できるため、変換しているものと思い込んでいました。指摘のあった部分の本文を修正したいと思います。

      > と説明を付け足してみる。

      ここまでしっかり実装しているとは、正直なところ目から鱗です。動作チェック時、馬鹿正直にキーフレームでしっかりカットしていたため気付きませんでした。

      今、確認したところ、まさにそのとおりです。追加事項として、コメントの内容を反映させたいと思います。

      貴重な情報に感謝!

      POP

    コメントを残す

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

    5 + 4 =

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