これにより、MP4Boxを介すことで削がれるコンテナとしての一部情報を保持することが可能となり、将来的にはMP4周りの処理に関してMP4Boxを置き換えるライブラリとなりそうです。
以下にビルド方法、各バイナリの簡易説明、使い方を記載しておきます(Windowsバイナリあり)。
各バイナリの簡易説明
L-SMASH Windowsバイナリ
最後に
ソース取得(もしくはアーカイブ解凍)終了後、L-SMASHディレクトリへ移動してmakeすると audiomuxer、boxdumper、remuxer のWindowsバイナリが出来上がります(configure不要)。
コンパイルオプションを意図して変えたい方は Makefile を直接編集してみてください。とはいえ、コンテナ入出力(ハードウェア的にはメモリやディスクI/O)が主要な処理であるため、ビルド時の最適化に労力を割いても処理速度に大きな影響を与える類のライブラリではありません。気軽にビルドしましょう。
audiomuxer [--sbr] [--3gp|--3g2] [--m4a] input output
例:
audiomuxer --m4a "hogehoge_audio.aac" "hogehoge_audio.m4a"
生ストリーム(RAW AAC)を各々のコンテナに格納する処理を司ります。 --sbr スイッチはHE-AACを扱う際に指定。
boxdumper input
例:
boxdumper "hogehoge_movie.mp4"
コンテナのbox情報をダンプ・表示します。膨大な情報が表示されるため、標準出力をファイルにリダイレクトして閲覧するのがベターでしょう。例えば──
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の大きなアイコンや、左のプルダウンメニューからも可能です。
*Revisionナンバーはコミットを数えた値であり、利便上付けたに過ぎず、L-SMASH公式のナンバリングではありません。
CPU : Intel Core-i5 2500K processor
Memory : 8GB
mingw(gcc4.6.1)
L-SMASH準公式
ISCライセンス
ピンバック: L-SMASHを使って.mp4にALACを格納する | トラネコのゲーム日記
どこで聞いたらいいかわからないのでここで聞かせてもらいます。
http://vfrmaniac.fushizen.eu/lsmash_faq.html
上記サイトに書いてあった通りにmuxerで–file-format m4aとしてもApple形式(参照チャプタートラック)のチャプターが付きません。
Nero形式(チャプターリスト))のチャプターは付きます。
しかし、remuxerで結合するとApple形式のチャプターがちゃんと付きます。
muxerではApple形式のチャプターを付ける事はできないのでしょうか?
あと少し気になったのが、remuxerだと参照チャプタートラックのフォーマットが”Timed text”となっていますが
本来は”Apple text”ではないでしょうか?
書き方がまずくて意図したことが伝わっていないかもしれないので
実行したコマンドと一緒にもう一度説明させてください。
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形式のチャプターが付かないのは仕様なのでしょうか?
> 匿名さん
なるほど。
Apple形式のチャプターファイルではなくApple形式のチャプターそのものが付かないということですね(前者の意味だと勘違いしてしまい申し訳ございません)。
当方の環境でもmuxerのみApple形式のチャプタが付加されないことを確認しました。
開発者のmuken氏が思い当たる部分を修正したコードを提示してくださったため、以下に修正コードでビルドしたバイナリを用意しました。
お手数ですが、以下のバイナリでテストしていただけますでしょうか(当方の環境ではApple形式のチャプタが付いたことを確認できました)。
L-SMASH 修正テスト1(r718ベース)
また、テキストフォーマットが “Timed text” になる点についてもmuken氏に訊ねてみますので、返答まで少々お時間をいただけますでしょうか。
ありがとうございます、用意してくださったmuxerでテストした結果うまくいきました。
muxer –file-format mp4,m4a
muxer –file-format mp4,m4v
として264とaac、chapterファイルを結合すると、
Nero形式とApple形式のチャプター両方ちゃんと付くことを確認しました。
このチャンプターの問題とは全くの別件ですが、どうにも原因がわからないのでまたまた質問させてください。
実行したコマンドはこの二つです。
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」がちゃんと表示されます。
この違いが出る原因として何が考えられるでしょうか?
何度もすみません、また誤解を招く書き方をしてしまいました…。
原因は–file-format m4v,m4aの有無なのは明らかだと思うのですが、ではm4v,m4aを指定した場合に音声のハンドラ名「L-SMASH iTunes Metadata Handler」が、ユーザが指定したハンドラ名よりも優先されるというか、上書きされるのは仕様なのでしょうか?
LAVFiltersが勝手に上書きして表示しているだけです。
boxdumperで見れば、きちんとあなたが指定しているハンドラ名が書き込まれているのがわかるはずです。
L-SMASH muxerではiTunes MP4の場合に、iTunes Metadata領域を作成し、そこにencoding toolとして”L-SMASH”を明示します。
その領域のハンドラ名が「L-SMASH iTunes Metadata Handler」です。
音声トラックとは独立した領域なので、これを音声ハンドラとして表示するのはバグのようなものですね。
文句はLAVFiltersの方へどうぞ。
LAVFiltersの仕業でしたか。
muken様の言う通りにboxdumperで書き出してみると、指定したハンドラ名があることが確認できました。
LAVFiltersに文句を言うのは色々難しそうなので静観します。実用上はとくに問題ないようですし。
これで全ての疑問は解決しました。
POP様、muken様、色々と本当にありがとうございました。
> 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
またまた失礼いたします。
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の方にあるのか、原因は何でしょうか?