L-SMASHとL-SMASH Works。

aviutlで動画を読み込むときにL-SMASH Worksを使っていますが、ちょっと調べたので自分用メモ。

まずL-SMASHから。
L-SMASHはISO Base Mediaファイルフォーマット及びMP4を含むその派生ファイルフォーマットを扱うクロスプラットフォームのライブラリです。
これだけだと抽象的すぎてよくわかりませんが、その下に機能説明があります。
  • β版レベルのMultiplexer(マルチプレクサ)及びDemultiplexer(デマルチプレクサ)として動作します。
  • スタンドアローンな実行ファイルを利用して、いくつかの形式の映像及び音声をmuxすることができます。
さらにその下にもうちょっと詳しい説明があります。
  • 任意のボックス(アトム)をエクスポートしたり、任意の位置に書き出すことができます。
  • カスタムI/O APIを提供しているため、ユーザーがメモリ上に入力や出力を行う処理を記述することが可能です。
  • Mux直後にプログレッシヴダウンロード用の最適化が可能です。
  • ムービーフラグメントによる出力が可能です。
  • インデックス済み自己初期化可能なセグメント('dash')の作成が可能です。
  • テストツール的な実行ファイルで以下に挙げるストリームをmuxすることができます。
    • 映像
      • AVC/H.264 | MPEG-4 Part10
      • HEVC/H.265 | MPEG-H Part2
      • SMPTE VC-1 Advanced Profile
    • 音声
      • MPEG-2 AAC および MPEG-4 AAC
      • MPEG-1/2 Layer 1|2|3
      • MPEG-4 ALS
      • AMR-NB/WB
      • AC-3およびEnhanced AC-3
      • DTSおよびDTS-HD
上の方は何を言っているのかよくわかりませんが、最後の「ストリームのmux」のところは理解できます。

L-SMASH自体はソースコードのみの提供で、公式なバイナリは配布されていません。コンパイルするにはC99のコンパイラが必要ですが、Visual C++(2017)のC99サポートは不完全なためコンパイルできるかどうかはわかりません。ソースアーカイブをダウンロードして展開すると L-SMASH.sln などのファイルがありますが、config.h がないとか lsmash.def がないとかのエラーが出てコンパイルはできませんでした。それ以上は調べていないので不明です。

L-SMASH WorksはこのL-SMASHにffmpegやlibavを使用して動作するaviutlなどで利用できるプラグインです。MSYS2とMinGW-w64などを使ってコンパイルされています。L-SMASH Works r935 release2では、L-SMASHがr1474、ffmpegが4.0.2でNVDECが使える(はず)とのことです。

L-SMASHのソースツリーをみると、boxdumper、muxer、remuxer、timelineeditorというのがあります。L-SMASH Worksではこれらがコンパイルされたものがありますので、単独で起動してみると、

boxdumper : L-SMASH isom/mov structual analyzer rev1474 f963b5a
muxer : L-SMASH isom/mov multiplexer rev1474 f963b5a
remuxer : L-SMASH isom/mov re-muliplexer rev1474 f963b5a
timelineeditor : L-SMASH isom/mov timeline editor rev1474 f963b5a

と出てきますが、それぞれが行うこと(あるいは行わないこと)が今ひとつわかりません。なので実際に使ってみます。

boxdumperは動画の構造を解析するツールで、構造解析した結果をテキストで書き出すものです。MP4ファイルを食わせてみると、以下のような出力を行います。


timelineeditorはMP4ファイルのタイムラインを編集するためのツールのようです。上のキャプチャにあるtimecodeなどをいじるためのもの、なのでしょうが、ドキュメントがないのでよくわかりません。たぶん規格にあたればわかるんでしょう。

muxer/remuxerですが、解説しているページを見つけました。Mux? Demux? Remux? Huh?です。

muxは要約すると2つもしくはそれ以上の信号を1つにまとめること。デジタルメディアファイルの世界では映像と、1つまたはそれ以上の音声トラック、字幕トラックをまとめることです。その他にもチャプタートラックなどもあります。

demuxはその逆で、muxされたファイルからストリームを分離します。

remuxは分離したものを再度muxすることです。なので、muxerはtimescaleなどを指定できますが、remuxerはできません。また、muxerは出力フォーマットを指定できますが、remuxerは指定できません。

いわば、muxerは分離されたビデオトラックとオーディオトラックを合成(マルチプレクス)するもので、remuxerはさらに追加でオーディオトラックを合成するときに使うもの、ということなのでしょう。

なので、すでにあるMP4ファイルにチャプターや字幕を「追加」したいときにはremuxerを使えばいいということです。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...