要望のあったものの追加。・
v1.33で追加した、上限ビットレート指定について、自動計算される余裕の大きさを設定できるようにした。その他の設定から。
・
通常のx264guiEx.iniの代わりに専用のx264guiEx.iniを使用することで、muxerとしてmp4boxの代わりにL-SMASH(remuxer)を使用することもできるようにした。L-SMASH remuxerに対応して、音声alacも普通にmuxできるようにして欲しいという要望があったので。
使用法が多少ややこしいので、続きに詳しく書きました。よくわからない人はこれまでどおりmp4boxを使用してください。・その他細かい修正。
※今回はx264guiEx.iniも更新が必要です。といっても通常のmp4box用での変更は、
[SETTING_MUXER_TC2MP4]
…
base_cmd=" -i "%{vidpath}" %{au_cmd} -o "%{muxout}" %{tc_cmd} -O " -brand mp42 %{ex_cmd} %{tmp_cmd} ""
↓
base_cmd=" -i "%{vidpath}" %{au_cmd} -o "%{muxout}" %{tc_cmd}
-L "%{mp4muxerpath}" -O " -brand mp42 %{ex_cmd} %{tmp_cmd} ""
だけなので、上の一行を書き換えてもらえればOKです。
ダウンロード>>x264guiExの導入>
まず、余裕の大きさの設定について。 自動マルチパスで上限設定した場合、--bitrateで指定されるビットレートは、
・目標ビットレートで指定した値
・(上限により計算されるレート - 音声レート) - (適当な余裕)
のどちらか小さい方になる。
今回設定できるのは、この"適当な余裕"の大きさ。
「その他の設定」の「自動マルチパス」タブ(新設)から設定できる。
スライドバーを適当に弄ってみると、自動計算される余裕の大きさが変わるのがわかると思う。
余裕の大きさを小さくすると、上限ぎりぎりのサイズになる可能性が上がるけども、逆に上限を超えて再エンコードとなり、時間がかかってしまう可能性が上がる。
デフォルトの余裕の大きさ「10」はあまり再エンコードがかからないよう大きめの余裕設定になっている。お手軽自動マルチパスとしてはこのぐらいでいいと思うけど、もっとぎりぎりを目指したい人は(再エンコードが頻繁に必要になることを覚悟して)この余裕を小さくするといいかもしれない。
次にL-SMASH対応について。 v1.33でqaac/refalac用設定をx264guiEx.iniに追加したわけだけど、「alacはmp4boxで格納できず、L-SMASHでやるしかない」との要望があったので、対応してみた。
L-SMASHはmp4コンテナを取り扱うためのライブラリで、mp4の規格に忠実な実装が行う、という方針で開発されている。x264のmuxerとして使用されていたり(x264_L-SMASH)、remuxer/muxerなどを使用すれば単体でmp4 muxできる。
猫科研究所 - L-SMASH github - L-SMASHL-SMASHはPOP氏がビルドして下さっています。
http://pop.4-bit.jp/(左上から)
今回はL-SMASH用の設定が書かれたx264guiEx.iniを使用することで、x264guiExでL-SMASH remuxer/muxerを使用できるようにしたということ。
x264guiExでL-SMASHを使用するための手順。 1) 「L-SMASH muxer用のいろいろ」フォルダに入ってるx264guiEx.iniをpluginフォルダに入れます(通常版を上書き)。
2) x264guiExの設定画面から、「remuxer.exeの指定」「timelineeditor.exeの指定」を行います。
3) L-SMASH remuxer.exeは、rawストリーム(AAC-ADTSなど)のmux(多重化)に対応していません。音声エンコーダがrawストリームを出力する場合には、加えてL-SMASH muxer.exeによるmp4への格納が必要になるので、これはwrapperバッチファイルを用意することで対応しました。
wwapper.bat内で、音声エンコ → muxer.exeでmp4に格納、の手順を行なっている。
この処置が必要なのはfawcl、Lame(mp3)、ffmpeg(AC3)、ext_bs。
手順は、
- それぞれのエンコーダに対応するwrapper.batを、L-SMASH muxer.exeとともにエンコーダ実行ファイルのある場所と同じフォルダに配置する。
- x264guiExの設定画面から、wrapper.batを指定する。
のようにする。
L-SMASHの実行ファイルについて。(POP氏ビルド r512)ご存知の人も多いだろうけど、大雑把にL-SMASHの実行ファイルについて。細かいオプションなどは書くとごちゃごちゃしてわかりにくくなるので、もっとも基本的な使い方だけ。
muxer.exe -i <rawストリームのファイル> [-i <rawストリームのファイル>] -o <出力mp4ファイル名> muxer.exeは、rawストリームをmp4へ格納したり、rawストリーム同士を多重化したりできる。
rawストリームってのはAAC raw (AAC-ADTS)とか、H.264/AVC ES(Elemetary Stream)とか。
neroaacencとか、qtaacencとか、デフォルトのqaacの出す音声はあらかじめmp4に入ったAACだけど、fawclとかの出すAACはraw AAC (AAC-ADTS)だったりして罠にハマる。(まあ、
MediaInfoで見れば一発でわかるけど。)
remuxer.exe -i <入力mp4ファイル1> [-i <入力mp4ファイル2>] -o <出力mp4ファイル> remuxer.exeはmp4に格納されたファイルどうしのmux(多重化)。
timelieneditor.exe --timecode <タイムコードファイル> <入力mp4ファイル> <出力mp4ファイル>タイムコードをmp4に反映させる。x264guiExで自動フィールドシフト使用時はこれを使う。
mp4boxのように「#」「%」使えないトラップが仕込まれていたりしないのがいいですね。
というわけで、全体の流れとしては、
1. 動画エンコx264.exe [オプション] -o <out_video.mp4> <入力ファイル>
2. 音声エンコ
neroaacenc.exe [オプション] -if <入力音声ファイル> -of <out_audio.m4a>or
fawcl.exe <偽装wavファイル> <out_audio.aac>
muxer.exe -i <out_audio.aac> -o <out_audio.m4a>3. muxremuxer.exe -i <out_video.mp4> -i < out_audio.m4a> -o <out_movie.mp4>4. 必要ならさらに… timelineeditor.exe --timecode <タイムコードファイル> <out_movie.mp4> <out_movie_new.mp4> コマンドラインから実行する場合、x264_L-SMASH使って、
neroaacenc.exe [オプション] -if <入力音声ファイル> -of <out_audio.m4a>
x264_lsmash.exe [オプション] [--timecode <タイムコードファイル>] --audiofile <out_audio.m4a> --acodec copy -o <out_movie.mp4> <入力ファイル>or
fawcl.exe <偽装wavファイル> <out_audio.aac>
x264_lsmash.exe [オプション] [--timecode <タイムコードファイル>] --audiofile <out_audio.aac> --acodec copy --ademuxer lsmash -o <out_movie.mp4> <入力ファイル>
のほうがシンプルですがね。