H.264の映像とAACの音声はこうして無変換で結合(mux)しよう! | KNのブログ

KNのブログ

テニス、生活の知恵、B級グルメ、時事問題、精神世界、その他いろいろ書いています。
      ※使用PCは、ブログ開設時から 「Windows XP」 です。(マシンは2台目→3台目)

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プロンプトや、エクスプローラ
      ほか半分以上が消えている!
     ・問題は、それだけではない。「プログラム」以下のフォルダの
      アイコンイメージがおかいのだ。(下記の絵の通り) 修復できず。
  こんな感じだ:

KNのブログ


  うっとうしいので、早い内に4/13のバックアップからCドライブを戻し、
  その後インストールしたソフトをもう一度インストールしようと思っている。

  それゆえ、Yambを使うならば、インストール版ではなくて、zip形式の解凍版
  を使いましょう! (下記のページで、青色のアンダーラインの方をDL)

KNのブログ

  ちなみに、英語版GUIでもけっこう使えます。
  こんな感じなので、1回日本語を見ておくと迷うことは少なくなるでしょう。

KNのブログ


KNのブログ


KNのブログ


KNのブログ


  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行を青字で追加。