L-SMASH は次のステージへ
 muken氏が主導するMP4に関わるライブラリ「L-SMASH」にremuxerが実装されました。これまで、GPACに代わるものとして”x264に付随するMP4周りのライブラリ”という毛色だったL-SMASHですが、この度のremuxer実装により、MP4Boxを使わずしてMP4コンテナに格納された映像ストリームと音声ストリームのマルチプレクス処理が可能となりました(予めコンテナに格納されたストリーム同士をmuxするという実装状況から、現時点ではremuxerと呼称されている)。

これにより、MP4Boxを介すことで削がれるコンテナとしての一部情報を保持することが可能となり、将来的にはMP4周りの処理に関してMP4Boxを置き換えるライブラリとなりそうです。

以下にビルド方法、各バイナリの簡易説明、使い方を記載しておきます(Windowsバイナリあり)。

Index
L-SMASH remuxer をビルドする(mingw)
各バイナリの簡易説明
L-SMASH Windowsバイナリ
最後に

L-SMASH remuxer をビルドする(mingw)
まず、L-SMASHのソースを公式gitレポジトリから取得します(x264audioをベースとした非公式gitレポジトリではありません)。各々の環境で作業用ディレクトリに移動し──
git clone git://repo.or.cz/L-SMASH.git
と入力し取得します。もしくは、ブラウザでアクセスしsnapshot(tarまたはzipアーカイブ)を取得することも可。

ソース取得(もしくはアーカイブ解凍)終了後、L-SMASHディレクトリへ移動してmakeすると audiomuxer、boxdumper、remuxer のWindowsバイナリが出来上がります(configure不要)。

cd L-SMASH make

コンパイルオプションを意図して変えたい方は Makefile を直接編集してみてください。とはいえ、コンテナ入出力(ハードウェア的にはメモリやディスクI/O)が主要な処理であるため、ビルド時の最適化に労力を割いても処理速度に大きな影響を与える類のライブラリではありません。気軽にビルドしましょう。

各バイナリの簡易説明
  • audiomuxer.exe
  • 書式:
    audiomuxer [--sbr] [--3gp|--3g2] [--m4a] input output
    例:
    audiomuxer --m4a "hogehoge_audio.aac" "hogehoge_audio.m4a"

    生ストリーム(RAW AAC)を各々のコンテナに格納する処理を司ります。 --sbr スイッチはHE-AACを扱う際に指定。

  • boxdumper.exe
  • 書式:
    boxdumper input
    例:
    boxdumper "hogehoge_movie.mp4"

    コンテナのbox情報をダンプ・表示します。膨大な情報が表示されるため、標準出力をファイルにリダイレクトして閲覧するのがベターでしょう。例えば──
    boxdumper "hogehoge_movie.mp4" > "hogehoge_movie_boxdump.txt"
    のように。

  • remuxer.exe
  • 書式:
    remuxer input1 [input2 input3 ...] output
    例:
    remuxer "hogehoge_movie.mp4" "hogehoge_audio.m4a" "hogehoge_movie_output.mp4"

    対応フォーマット:
    MPEG-4 Audio、ALAC、AMR、AC3、E-AC3、LPCM、MPEG-4 Video、MPEG-4 AVC

    主に映像ストリーム・コンテナと音声ストリーム・コンテナをマルチプレクスする用途として使用します。今のところ、RAWストリームのインポートはサポートされておらず、あくまでコンテナに格納されたストリーム同士の再マルチプレクス特化という点から remuxer となっています。また、同種の複数ストリーム(2つの音声等)にも対応していますが、現状では同種のストリームが同時再生される仕様となっています。

    先々の事についてmuken氏は、「将来的にremuxerとaudiomuxerを統合したい」「RAWストリームのインポートも(できれば)実装したい」と意向を述べ、実装上の問題だけでなく「時間が足りない」と漏らすなど多忙な様子でしたが、MP4Boxの置き換えを狙うには避けて通れない部分でもあるため、私としては長い目で期待しつつ見守りたいと考えています(実装を約束するものでないにしても、そのチャレンジは評価されるべき)。

    最後に、RAW AAC(仮名:hogehoge_audio.aac)とMPEG-4 AVC(仮名:hogehoge_movie.mp4)を現状のL-SMASHでmuxするには、以下のようなバッチ処理が基本的に考えられます。


    audiomuxer --m4a "hogehoge_audio.aac" "%TEMP%\_audio.m4a"
    remuxer "hogehoge_movie.mp4" "%TEMP%\_audio.m4a "hogehoge_movie_output.mp4"
    del "%TEMP%\_audio.m4a"

    L-SMASH remuxerは、MP4Boxのように半角 # 等がファイル名として使えないという制限が無いため、ファイル操作という点でも自由度は高いように思います。

    L-SMASH Windowsバイナリ
    これらL-SMASHライブラリをビルドしたものは開発途上段階のものであり、不具合や未実装部分がある点を充分に承知したうえで自己責任においてご使用ください。バイナリを使用したことで発生したハードウェア・ソフトウェア破損(環境含)の補償・責は、当方・開発者ともに一切負わないものとします。

  • L-SMASH r311 Windowsバイナリ(x86) Download
  • commit : 0cac9f92c44461dc687025f33ebf2f628a20779d
    *ダウンロードは当サイトのヘッダーにあるL-SMASHの大きなアイコンや、左のプルダウンメニューからも可能です。
    *Revisionナンバーはコミットを数えた値であり、利便上付けたに過ぎず、L-SMASH公式のナンバリングではありません。
  • ビルド環境
  • Windows7 Professional 64bit Edition
    CPU : Intel Core-i5 2500K processor
    Memory : 8GB
    mingw(gcc4.6.1)

    最後に
    記事に対するご指摘、または明確な不具合等(環境とその再現方法が明確なもの)がありましたら、以下commentsへpostをお願いいたします。当方で確認できる事象、もしくは不具合の可能性が高いと判断した場合は、当方が開発者の方々にコンタクトし確認作業を行います。

  • リンク
  • L-SMASH git リポジトリ
    L-SMASH準公式
    ISCライセンス

    1件のコメント

    1. ピンバック: L-SMASHを使って.mp4にALACを格納する | トラネコのゲーム日記

    2. どこで聞いたらいいかわからないのでここで聞かせてもらいます。

      http://vfrmaniac.fushizen.eu/lsmash_faq.html
      上記サイトに書いてあった通りにmuxerで–file-format m4aとしてもApple形式(参照チャプタートラック)のチャプターが付きません。
      Nero形式(チャプターリスト))のチャプターは付きます。

      しかし、remuxerで結合するとApple形式のチャプターがちゃんと付きます。
      muxerではApple形式のチャプターを付ける事はできないのでしょうか?

      あと少し気になったのが、remuxerだと参照チャプタートラックのフォーマットが”Timed text”となっていますが
      本来は”Apple text”ではないでしょうか?

      匿名
    3. 書き方がまずくて意図したことが伝わっていないかもしれないので
      実行したコマンドと一緒にもう一度説明させてください。

      muxerで実行したコマンドは下記の通りです。

      muxer –file-format mp4,m4a –chapter “chapter.txt” -i “movie.264”?fps=24000/1001 -i “audio.aac”?encoder-delay=2112 -o “muxerで結合.mp4”

      “movie.264″は、x264でエンコードしたファイル
      “audio.aac”は、qaacでエンコードしたファイル
      “chapter.txt”は、AviUtlのチャプター編集プラグインで作ったファイル

      “muxerで結合.mp4″を確認すると、Nero形式のチャプターは付いていますが、
      Apple形式のチャプターは付いていません。

      remuxerで実行したコマンドは下記の通りです。

      muxer –file-format mp4 -i “movie.264”?fps=24000/1001 -o “movie.mp4”
      muxer –file-format m4a -i “audio.aac”?encoder-delay=2112 -o “audio.m4a”
      remuxer –chapter “chapter.txt” -i “movie.mp4” -i “audio.m4a” -o “remuxerで結合.mp4”

      “remuxerで結合.mp4″を確認すると、Nero形式とApple形式のチャプター両方ちゃんと付いています。
      Apple形式のチャプターのフォーマットは”Apple text”ではなく、”Timed text”となっていますが。

      muxerだとApple形式のチャプターが付かないのは仕様なのでしょうか?

      再度説明を
    4. > 匿名さん

      なるほど。
      Apple形式のチャプターファイルではなくApple形式のチャプターそのものが付かないということですね(前者の意味だと勘違いしてしまい申し訳ございません)。

      当方の環境でもmuxerのみApple形式のチャプタが付加されないことを確認しました。

      開発者のmuken氏が思い当たる部分を修正したコードを提示してくださったため、以下に修正コードでビルドしたバイナリを用意しました。
      お手数ですが、以下のバイナリでテストしていただけますでしょうか(当方の環境ではApple形式のチャプタが付いたことを確認できました)。

      L-SMASH 修正テスト1(r718ベース)

      また、テキストフォーマットが “Timed text” になる点についてもmuken氏に訊ねてみますので、返答まで少々お時間をいただけますでしょうか。

      POP
    5. ありがとうございます、用意してくださったmuxerでテストした結果うまくいきました。

      muxer –file-format mp4,m4a
      muxer –file-format mp4,m4v
      として264とaac、chapterファイルを結合すると、
      Nero形式とApple形式のチャプター両方ちゃんと付くことを確認しました。

      うまくいきました
    6. このチャンプターの問題とは全くの別件ですが、どうにも原因がわからないのでまたまた質問させてください。

      実行したコマンドはこの二つです。

      muxer –file-format mp4,m4v,m4a -i “movie.264”?fps=24000/1001,handler=UserVideoHandler -i “audio.aac”?encoder-delay=2112,handler=UserAudioHandler -o “muxerで結合A.mp4”
      muxer –file-format mp4 -i “movie.264”?fps=24000/1001,handler=UserVideoHandler -i “audio.aac”?encoder-delay=2112,handler=UserAudioHandler -o “muxerで結合B.mp4”

      上のコマンドをA、下のコマンドをBとします。
      違いは、Aが「–file-format mp4,m4v,m4a」、Bは「–file-format mp4」であるという点のみです。

      AもBも映像のハンドラ名を「UserVideoHandler」、音声のハンドラ名を「UserAudioHandler」としていますが、
      コマンドAで出力した”muxerで結合A.mp4″をMPC-BE,LAV Filtersで再生すると、
      音声のハンドラ名が「L-SMASH iTunes Metadata Handler」と表示されしまいます。
      映像のハンドラ名は、結合時に指定した「UserVideoHandler」がちゃんと表示されます。

      コマンドBで出力した”muxerで結合B.mp4″の場合は、映像、音声共に、
      「UserVideoHandler」、「UserAudioHandler」がちゃんと表示されます。

      この違いが出る原因として何が考えられるでしょうか?

      別件になりますが
    7. 何度もすみません、また誤解を招く書き方をしてしまいました…。

      原因は–file-format m4v,m4aの有無なのは明らかだと思うのですが、ではm4v,m4aを指定した場合に音声のハンドラ名「L-SMASH iTunes Metadata Handler」が、ユーザが指定したハンドラ名よりも優先されるというか、上書きされるのは仕様なのでしょうか?

      別件になりますが
    8. LAVFiltersが勝手に上書きして表示しているだけです。
      boxdumperで見れば、きちんとあなたが指定しているハンドラ名が書き込まれているのがわかるはずです。

      L-SMASH muxerではiTunes MP4の場合に、iTunes Metadata領域を作成し、そこにencoding toolとして”L-SMASH”を明示します。
      その領域のハンドラ名が「L-SMASH iTunes Metadata Handler」です。
      音声トラックとは独立した領域なので、これを音声ハンドラとして表示するのはバグのようなものですね。
      文句はLAVFiltersの方へどうぞ。

    9. LAVFiltersの仕業でしたか。
      muken様の言う通りにboxdumperで書き出してみると、指定したハンドラ名があることが確認できました。
      LAVFiltersに文句を言うのは色々難しそうなので静観します。実用上はとくに問題ないようですし。

      これで全ての疑問は解決しました。
      POP様、muken様、色々と本当にありがとうございました。

      匿名
    10. > muken氏
      別件へのコメント対応ありがとうございました。

      > 匿名さん
      ご報告いただいた件の修正がcommitされ、r719となりました。

      Timed text の件ですが、Apple MP4にはTimed Text、MOVにはApple Textが使われるようになっており、mp4raとしてはApple Textを格納する定義が無いとのことです(muken氏談)。

      # 返答原文は以下のとおり
      https://twitter.com/Paranoialmaniac/status/319224097341063169
      https://twitter.com/Paranoialmaniac/status/319225101717471232

      POP
    11. またまた失礼いたします。
      qaacの新しいoptionをつけたm4aをremuxerで指定すると音声のRemuxingが失敗してしまうようです。
      qaacのこのoptionです
      –gapless-mode Encoder delay signaling for gapless playback.
      0: iTunSMPB (default)
      1: ISO standard (elst + sbgp + sgpd)
      2: Both

      “C:\qaac.exe” -V 95 –gapless-mode 1 – -o “C:\gapless-mode1.m4a”
      “C:\qaac.exe” -V 95 –gapless-mode 2 – -o “C:\gapless-mode2.m4a”

      “C:\remuxer.exe” -i “C:\X264.mp4” -i “C:\gapless-mode1.m4a” -o “C:\1.mp4”
      [Warning] failed to construct timeline.

      “C:\remuxer.exe” -i “C:\X264.mp4” -i “C:\gapless-mode2.m4a” -o “C:\2.mp4”
      [Warning] failed to construct timeline.
      [Warning] failed to set an iTunes metadata.

      これがx264_L-SMASHで–audiofile “gapless-mode.m4a” –acodec copyのoptionをつけて
      エンコードした場合は正常にRemuxingできます。

      音声Remuxing失敗の原因がL-SMASH remuxerにあるのか
      qaacの–gapless-mode optionの方にあるのか、原因は何でしょうか?

      mgsf

    コメントを残す

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

    3 × 3 =

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