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 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...