H.264の映像とAACの音声はこうして無変換で結合(mux)しよう!
あれから、なんとか無劣化でH.264の映像とAACの音声を結合できないか
なかなか出来なくて、どっぷりはまっていたKNです。(笑)
食事をするのも忘れて、寝るのもかなり削って、ようやく分かって
きました! ネット上の情報のおかげなので、皆さんに「おすそわけ」
します!
トピックスは6つ。
1.AACの音声を読み込みできる動画編集ソフトがほとんど無いのだ
2.H.264の映像とAACの音声の結合(mux)は、MP4コンテナにするのが最も簡単
3.今回のケースでは、H.264(RAW)の映像でピッタリ合った!
4.ヤンバに要注意! MP4Boxのフロントエンドは英語版で我慢しよう!
5.MP4とMKVで、劣化のほとんどない動画編集環境が実現
6.これらの作業に関連するツール、比較した候補ツールの評価
1.AACの音声を読み込みできる動画編集ソフトがほとんど無いのだ
(フリーソフトの世界での話です)
VirtualDubModの音声入れ替え機能では、AAC音声の入力が出来ない。
ほかの音声入れ替え機能を持つソフトも同様だった。
もし、VirtualDubModでAAC音声の入れ替えが出来れば、そこで満足
して止まっていたかもしれない。
2.H.264の映像とAACの音声の結合(mux)は、MP4コンテナにするのが最も簡単
ネット上でこの情報を見つけた時は、ちょっとびっくりした。
そしてここから、MP4と音声のずれ解消にどっぷりはまっていった!(笑)
MP4コンテナにするのは、MP4Box を使うのが最も簡単・精度が高いだろう。
MP4Box_0.4.6-DEV-rev.7(2010-10-03) ・・・実際には使わず(Yambを使用)
バッチ版ならば、MP4Box-0.4.6-rev2735.zip の方が普通か?
ただし、最初に出来たのは、音がずれていた! 1秒だったか、2秒だったか、
かなりの秒数だったかは忘れた。(いっぱいテストしたので、覚えきれない!)
※入力に、H.264形式の映像とAAC形式の音声を用意すれば、
MP4Box がMP4コンテナ形式に結合(mux)してくれるのだ!
結合時に、映像も音声も劣化しません。
そこから、もがきが始まった。 なぜ合わないんだ? その試行錯誤が。
結論から言うと、たぶんこれで大筋は合っていると思うのだが、
・映像と音声を結合(mux)する時に、結合ソフト側でずれることがある
映像が1秒と400ミリ秒弱遅れたケースあり(24コマ・90分強の動画で)
音声がちょっと早くなったり、2秒ほど遅れたケースもある
・単なるコンテナの変換時でも、音が少しずれることがある
avidemux_2.5.4_win32で、映像-音声をcopy-copyでMP4からMKVに変換
時300ミリ秒以下音声が早くなった。音声データは変わっていないのに。
・入力データの映像や音声が、単独では同じ時刻で同じ内容であっても、
入力データのフォーマットによっては、大きくずれたりほとんどずれなかった
りする。
-音声のVBR(可変ビットレート)はずれやすい。AACがずれやすいのは
そのことも関係している。
-映像のH.264(RAW)とH.264(MP4)で、結合ソフトの動きが違ってき、
結果的に音ズレに影響する。
参考:H.264(MP4)のVFR(可変フレーム数)で映像が1秒ちょっと
遅れた例あり。逆に、H.264(RAW)のVFR(可変フレーム数)
ではほとんど遅れなかった。但し、MP4コンテナに結合後で。
(H.264(RAW)ではフレームレート情報が出ないのだ!)
ここまで分かるのに、相当な時間と試行錯誤で大変だった。
※H.264(RAW)とH.264(MP4)の表記方法は間違っているかもしれない。
何に対応するかは、何となく分かるだろう。(詳しくないのでごめん)
3.今回のケースでは、H.264(RAW)の映像でピッタリ合った!
細かい話で申し訳ない。だが、困っている人にはおししい話なので。
映像は、VFR(可変フレームレート)でフレームレート情報が出ないのが関係
するのか、音声がピッタリ合った。しかし、H.264(MP4)のVFRでは映像が1秒
ちょっと遅れて、結果的に音が1秒ちょっと早く聞こえてきたケースがある。
(笑=2データしか持っていない)
音声はAACでVBR(可変ビットレート)だったが、ピッタリ合ったのだ。
MP4Boxで、fpsに23.976を指定した。25では正常なものが作られなかった。
たまたま、今回のケース(=入力データの特徴)だけかもしれない。
でも、使えるケースがけっこうあるのではないかと思うので、書き残しておく。
・MP4形式は、途中でfpsが大きく変わってもいいような仕様だ。
その時には逆に、H.264(MP4)の方が有利かもしれない。
ちなみに、映像は大元のFLV形式から直接抜き出したものを使ったが、
hugflash2_8 ) H.264(MP4) で出力されるようだ
○ FLV_Extract ) H.264(RAW) で出力されるようだ
MP4Box(のフロントエンドのGUI)でMP4を作る際に、処理途中のメッセージが
H.264(MP4) )ISO ファイルをインポートしています...
H.264(RAW) )AVC ストリームをインポートしています...
と出るので、両者を区別できる;対応する処理が違っている可能性がある。
4.ヤンバに要注意! MP4Boxのフロントエンドは英語版で我慢しよう!
ヤンバとは、私が勝手にそういっているだけで正式にどう言うのかは
知らない。ヤマンバに近い音なので、誰でも注意するだろう?!(笑)
ヤンバとは、MP4Boxのフロントエンド:Yambのこと。
こいつを普通にインストールすると、スタートメニューの情報を壊すのだ!
※2011-5-22時点で最新のインストーラ版:Yamb-2.1.0.0_beta2_setup.exe
の場合。
インストールしてからその情報を知り、アンインストール時に壊すような
ことが書いてあったので、Cドライブのパーティション・コピーをとって
から削除したのだが、何と・・・ 既にスタートメニューから一部のプログラム
が削除されてしまっていたのだ!(パーティション・コピー先を見たら)
・アプリは表示されて起動できるみたい、だが並びが変わっている
・\Documents and Settings\USER1\スタート メニュー を見ると、
ここではかなりのアプリのフォルダが既に消えている!
・さらにアンインストールすると、アプリはスタートメニューで
表示されて起動できるが、\Documents and Settings からは
Yamb 以外はすべて削除されている!
・おまけに、アクセサリから MS-DOSプロンプトや、エクスプローラ
ほか半分以上が消えている!
・問題は、それだけではない。「プログラム」以下のフォルダの
アイコンイメージがおかいのだ。(下記の絵の通り) 修復できず。
こんな感じだ:
うっとうしいので、早い内に4/13のバックアップからCドライブを戻し、
その後インストールしたソフトをもう一度インストールしようと思っている。
それゆえ、Yambを使うならば、インストール版ではなくて、zip形式の解凍版
を使いましょう! (下記のページで、青色のアンダーラインの方をDL)
ちなみに、英語版GUIでもけっこう使えます。
こんな感じなので、1回日本語を見ておくと迷うことは少なくなるでしょう。
MKVExtract やEAC3to は、そのような変換が必要になったら入れたらいいで
しょう。
Yamb-2.1.0.0_beta2_setup.exe の中身を覗いて、.exeを解凍すれば必要な
ものをコピーすることができます。(普通の人は導入不要)
日本語化部分は、Nice cheat.さんのパッチのものを使用させていただきました。
2011-1-20 「Yamb-2.1.0.0 beta 2 日本語化パッチ」
from Nice cheat. さん
http://cheater.seesaa.net/article/178477921.html
なお、Yambには不具合があるようなので、その点についてもご注意ください。
ガーン! アンインストールしてからzip版を動かしたら、異常終了するように
なった! ??? (←→My MP4Box GUI v0.5.5.4.7zは問題なく動いている)
| →よくわからんが、DLL使用版のMP4BoxとDLL不要版のMP4Boxがあり、
| DLL使用版ではlibgpac.dllとMP4Box.exeをセットで使うようだ。
| 違うlibgpac.dllを与えたら、これこれのモジュールが無いと言ってきて
| エラーになったので、インストール版の中から両方を抽出しないと
| いけないみたいだ。その関係で、最新版?のMP4Box.exeではダメの
| ようだ。それから、同じディレクトリにMediaInfo.dllが無いと
| 起動時にエラー終了する! 疲れて勘違いしてないと思うが・・・
| なお、日本語化パッチをあてると、起動時と終了時に不正な処理を
| しにいって、少し激しいめのエラーとなる。(便利になるが)
| よくわからんが、PCを再起動し、解凍直後のファイルからyamb.exeと
| 同レベルにあるMediaInfo.dllをコピーしたら、6/29になっていた?
| ようで、それを上書きし、解凍直後の所で動かしたYamb.cfgもコピー
| したら、(日本語化パッチ版でも)出なくなった。それでも??な
| のは、muxとかdemuxをすると終了時の不正な処理をして激しいめの
| エラーメッセージが出ないが、何もしないような時には出るのだ。
| → ちょっと分かった!
| #1: Keep all MPEG-4 systems when using Concate or Create
| Command
| Store file with all media data first
| Verbose Mode
| にチェックを付けていると、終了時にさっきのエラーが出るようだ。
| しかも、その設定部分で1個でもエラーが出たら、ファイルのYamb.cfg
| には反映されずに古いまま残ってしまうのだ!
細かいパラメータ設定や、Mux/demux/Join/Split の4機能を使いたいならば
My MP4Box GUI v0.5.5.4.7z がいいと思う。(まだMuxしか使ったことがないが)
参考:出来たMP4は、Yambよりも5%サイズが大きかった!
→デフォルトで Hint for RTP/RTSP にチェックがついていて、
ストリーミング用の特殊トラックがつくので、はずしておくこと。
→しかし、それで出来たMP4はYambのよりも176バイト大きかった!
バイナリで比較すると、全然違い、作り方が違うようだ。
念のため、作成したMP4を同一ツールでdemuxして元のH264、AACと比較して
バイナリで同一であることを確認。My MP4Box GUI v0.5.5.4.7zは使える!
参考:ただし、カット機能では秒指定まで、Yambはミリ秒指定まで。
ただし、先頭はキーフレームでないと映像がおかしくなるらしいが。
5.MP4とMKVで、劣化のほとんどない動画編集環境が実現
MP4は、H.264の映像とAACの音声の結合(mux)で作ることが出来るが、
動画編集ソフトがほとんどない。Avidemuxでは操作できるが、制約あり。
(例:多重音声トラックに対応しておらず、ユーザーが指定した1トラックのみ)
Aviutilもできるが、難しすぎる! ストレスを感じ、いやになる。(笑)
一方、MKVはこれも自由度の高いコンテナで、こちらは動画編集ソフトがいろいろ
ある。
そこで、編集等をMKVコンテナで行い、最終形のMP4に映像と音声の結合(多重化)
をしてまとめ上げるのが一番いい(劣化も少ないし)のではないかと思ったのだ。
そこで、それの検証を行った。
①H.264の映像とAACの音声をMP4コンテナの形式に結合し、次にこのMP4形式
から映像と音声を分離・抽出(demux)してバイナリで比較したら、
全く同じだった。これは、MP4コンテナに変換してもまた元に戻せるという
ことを示している。(570MB位のデータで検証)
・MP4コンテナの形式に結合する/分離・抽出(demux)には、
MP4Box(のフロントエンドGUI)を使った
②H.264の映像とAACの音声をMP4コンテナの形式に結合し、さらにそのMP4
形式をAvidemuxでMKV形式に映像-音声をcopy-copyでコンテナ変換し、
そうして出来たMKV形式をMKVToolnix でH.264の映像とAACの音声に分解
したら、同じだった。(570MB位のデータで検証)
・映像は、バイナリで全く同一だった
・音声は、1バイトずつ320バイト以上離れての違いの感じ。
(片方はF1、もう片方はF9ばかりだった)
非常にほとんど同一!と言っていいだろう。
H.264、AAC --> 「MP4Box」-->MP4 -->
↓
「Avidemux」
↓
H.264、AAC<--「MKVToolnix」<ーーMKV <--
ぐるっと1回りしても、同じ(厳密には、音声についてはほとんど同じ)
であることが分かった。
③但し、AvidemuxでMKVコンテナ形式に変換したMKV動画は、なぜか
300ミリ秒以内(印象で。厳密には測定していない。)音声が早くなって
いた。映像は変わっていない。(コンテナ変換のみでこういうことがあるとは!)
注意事項:MKV動画からMKVToolnixで抽出したH.264の映像とAACの音声を、
同じMKVToolnixで結合したら、映像が元のタイミングよりも
6秒位早くなった! ??
MKVToolnixのMKV結合は使えないものと思われる。
5/29 訂正を追加:
今やったら、問題無く映像と音声の結合ができた。 映像のフレームレートを、
29.970(=30000/1001)とすべきところを、30としてしまったのだろうか?
当時作成したデータが残っていないので確認できない。(が、誤った
レートを指定すると映像が6秒近く早くなったのでそうなのか?)
ちょっと気になるのは、AvidemuxでMKV形式にて無音部分を追加して編集
後にそのままMKV形式で出力したもの(=AAC音声の原本に使用)や、
YambでmuxしてMP4形式に結合したものをAvidemuxでMKV形式にコンテナ
変換したもの(=変換テスト用)よりもサイズがほんの少し小さいこと。
6.これらの作業に関連するツール、比較した候補ツールの評価
mp4muxer-0.9.3.zip
何か、映像と音声の結合がうまくいかなかった! ??
それに、トラックの削除をしたら元ファイルから映像トラックor
音声トラックが直接削除されてしまった! (ファイルサイズも減った)
使えない、使わない方がいいのでは?
えこでこツール1.5.1(EcoDecoTooL114.zip)
音声の抽出専用ソフト。
MKV、MP4などからは無劣化で抽出できる。最初はこれを基準にした。
シンプル過ぎるのがちょっと難点か?
mkvtoolnix-unicode-4.7.0
先に書いたとおり。
MKVExtractGUI-2.2.2.5.zipはタイムコードを抽出できないので、
MKVExtractGUI-1.6.4.1Wizard-1.2.zipの方がいいかもしれない。
2012-2-18訂正追加: MKVExtractGUI-1.6.4.1Wizard-1.2で
タイムコードを抽出したものを(タイムコード欄に)指定して結合(mux)
したら、逆に映像と音声がかなりずれてしまった! ??
2012-2-9頃の作業で確認。
MKVExtractGUI-2.2.2.5 で(タイムコードを使わずで)良さそうだ。
XMediaRecode2329.zip
いまいち使い方がよく分からない。(笑)
入力ファイル名を日本語にしたら、出力ファイル名が大きく文字化け。
微妙~いいかもの間。 精度等は、自分で判断してください。
2012-2-18訂正追加: このあたりのバージョンから3.0 になる
あたりまでは不具合があって、うまく動作しない報告がある。
XMedia Recode 3.0.7.6あたりを使ってみて評価してください。
SUPER (c) v2011.build.48 (April 23, 2011)
エンコード・ソフト。ちょっと不安定なところがある。
抽出した○○.264をYambにそもそも読み込めなかった。 ??
映像と音声を結合させようとしたが、うまくいかなかった。
ソフトの画面真ん中に、注意書きとして「いくつかの抽出映像・音声は、
再生あるいは結合できないことがあります!」とちゃんと書いてある!
俺は使わない。
MediaCoder2011-R5-5152.zip
高機能みたいだが、(設定項目がいっぱいありすぎて)使い方が
よく分からない。 →ストレスがたまる。(笑)
うっとうしいので、中止。
いっぱい作業したので、一部何か勘違いしている所があるかもしれない。
何かの参考になればうれしい。
21:22 訂正。 「ACC」と書いてあったのは、すべて「AAC」の間違いです。
まだ訂正漏れがあるかもしれないが、みんなAACだと思ってください。
21:35 訂正。 「VFR」は正しくは「可変フレームレート」。
該当の1文を修正しました。
22:34 Yambをアンインストールしてからzip版を動かしたら、異常終了する
ようになった(青字)ことを書いた2行を追加。 原因調査中。
24:58 Yambのエラー対応について、分かったことを黒字で追加。(中間報告)
縦棒 | で該当行に印した。
2X:46 Yambが不正な処理をしに行く件、かなり分かったことを青字で追記。
縦棒 | で該当行に印した。
5/25 2:16追加。
2011-5-22時点で最新のインストーラ版:Yamb-2.1.0.0_beta2_setup.exe
が危険であることを特定して明示した2行を青字で追加。
なお、他の旧バージョンについては未確認。
5/27 訂正。 MP4Box はMP4Box-0.4.6-rev2735.zipの方が正解かもしれない。
バッチ版で使ってない、Yambでバッチ版のMP4Boxを使ってうまくいって
いないので、そのように読んでください。
トピック2の所で、青字で1行修正、1行追加。
しかし、MP4Box-0.4.6-rev2735.zipはmsvcr100.dll(Visual C++ 2010)を呼び出しており、ランタイムライブラリの「Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)」が必要になる。
しかし困ったことに、リモートでコードが実行されるという重大なセキュリティの穴があって、セキュリティ更新プログラムをあてないといけないのだ!(2011-4-12付け)
・[MS11-025] Visual C++ 2010 再頒布可能パッケージ セキュリティ更新プログ
ラム (2011 年 4 月 12 日) について
http://support.microsoft.com/kb/2467173/ja
・MS11-025 : MFC の重要な更新
http://www.microsoft.com/japan/security/bulletins/MS11-025e.mspx
これを見ると、Visual C++ のバージョンが2008 Service Pack 1 や
2005 Service Pack 1 であってもパッチをあてないといけないこと
が分かる!
また、システム要件として
Windows XP Service Pack 3 (x86) - Starter Edition(注1) を除くすべてのエディション
と書いてあるのも制約だ。(注1:開発途上国向けの機能制限廉価版エディションのこと)
・ダウンロード詳細 Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=c32f406a-f8fc-4164-b6eb-5328b8578f03
こっちならばパッチをあてなくてもいいのか? という点もはっきりしない!
こいつは2011-3-3公開なので、微妙な時期だ。
面倒がいやな人は、MP4Box-0.4.6-rev2735.zip を使うのをあきらめた方がいいだろう。
ちなみに、Yambで1つ前の(=msvcr100.dllを使っていない)MP4Box-0.4.6-rev2698.zipの奴を使って実行すると、AACのインポートまでは行ったが、そのあとでMP4Boxが異常終了した。 ??
※MP4Box_0.4.6-DEV-rev.7(2010-10-03).rar を使うようにしても同じ現象
Yambとバッチ用のMP4Boxの組み合わせがうまくいかない!
コマンドラインでMP4Boxを使うには、相当勉強しないといけないので、
コマンドライン用のMP4Boxを使うことはあきらめた!
5/29 訂正。 MKVToolnixで結合して6秒映像が早くなった件について、訂正の
9行を青字で追加。