先日リリースされた「Libav-SMASH File Reader」に続き、出力用のプラグイン「Libav-SMASH Exporter」もリリースされました。Libav-SMASH File Reader で読み込んだ MP4/MOVコンテナ等の映像・音声を無劣化(ストリームコピー)でエクスポートします。
なお、Libav-SMASH File Reader も更新しました(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 はストリームコピーをするだけであってコンテナフォーマット変換は今のところ実装していないとのことです。
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 File Reader 側でクリアーされています(私は Libav 側のデコーダでフルレンジフラグ判定を無効化したが、Libav-SMASH File Reader の更新はフルレンジで渡される場合のピクセルフォーマットを無効化することで対処。結果、同じ挙動となっており、当方の記事で気付かれた方がパッチを提出されたようです)。
・VFR-maniac/lsmashinput - GitHub
・l-smash - A simple tool for mp4. - Google Project Hosting
・Get ffmpeg
・VFR-maniac/lsmashexport - GitHub
>また、編集用途でなくても、Libav-SMASH File Reader で読み込んだファイルをそのまま Libav-SMASH Exporter で別形式のコンテナとして出力する用途にも使えますので、MP4からMOVに入れ替えるといった操作も AviUtl の GUI で簡単に行えます。
いえ。出来ません。コンテナの変更はできません。
何故なら、コンテナによってCODEC specificなデータの格納方法が違う場合があるので、変更するにはそれらを適切な形に変換する必要があり、そして、L-SMASHはその変換を実装していないからです。
L-SMASHはそれらを単純にコピーするだけです。
>キーフレーム以外のフレームでカットや範囲選択を行った場合、Libav-SMASH Exporter は近くのキーフレームをサーチして、そこから出力します
そこから出力はしますが、MP4やMOVで実装されているedit list (edts/elst)を使用して、選択開始フレームから表示しろというような命令をコンテナに残します。
QuickTime及びその系列のdemuxer/splitterならば、再生時には正しく選択開始フレームから表示するはずです。
と説明を付け足してみる。
> 変更するにはそれらを適切な形に変換する必要があり、そして、L-SMASHはその変換を実装していないからです。
ということは、ストリームをストレートにコピーしただけであって、異なるコンテナを指定してもソースコンテナのフォーマットを維持しているというわけですね。ソースコンテナ以外をエクスポート時に選択できるため、変換しているものと思い込んでいました。指摘のあった部分の本文を修正したいと思います。
> と説明を付け足してみる。
ここまでしっかり実装しているとは、正直なところ目から鱗です。動作チェック時、馬鹿正直にキーフレームでしっかりカットしていたため気付きませんでした。
今、確認したところ、まさにそのとおりです。追加事項として、コメントの内容を反映させたいと思います。
貴重な情報に感謝!