MP4結合時の音ズレを防止 「JoinMP4Files 1.0.6.0」

MP4ファイル結合時の音ズレを防止する為のMP4BOXフロントエンドです。

ダウンロードはこちらから。

変更点

・高速モードのチャプター位置ズレを抑制する処理を追加しました。

・結合キャンセル時にテンポラリファイルを削除するよう変更しました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. かこん より:

    早速、1.0.6.0を使ってみました。

    確かに高速結合におけるチャプター位置の問題はほぼ解消されていますね。
    150チャプターで試したところ全体で0.01秒位のずれなので誤差といえそうです。
    結合時間そのものは倍近くかかるようになってしまったようですが、これなら安心して使えそうです。
    ありがとうございました。

    ところで、一つだけ気になっていたのですが。

    当方は英語版のWindowsを使っていますが、ボタンの位置が日本語版と少しずれてしまっているようです。

    具体的には「追加」~「下へ」ボタンの高さが「MP4ファイル」テキストボックスの高さよりも高く、「下へ」ボタンが実際には「MP4ファイル」と「出力先」の間くらいに入っており、「下へ」ボタンと「参照」ボタンが半分ほど重なってしまっています。

    使用上問題はないですが、参考までに。

  2. ぬっき~ より:

    @かこん さま

    上手くいったようでひと安心です。

    処理時間はあまり変わらないかなと予想していたのですが結構増えますね。
    ちょっと残念。

    ちなみにチャプターを追加しない時にもチャプター修正の計算をしてしまっているので後日修正します・・・

    ボタンの位置ずれは心あたりがあります(^ ^;

    古いバージョンの初期ウィンドウサイズは現バージョンと比較して一回り小さいのですが、その値が設定ファイルに保存されていて起動時に再現しているせいだと思います。

    同じフォルダにあるJoinMP4Files.xmlを削除するのが一番てっとり早いです。
    (初期状態になるので設定が消えますが)

    もしくはツールのメインウィンドウのサイズを縦方向に少し大きくして、下のテキストボックス(実はサイズ可変w)を縮めてあげれば重なりは解消すると思います。

    バグが多くて恐縮です。。

  3. かこん より:

    JoinMP4Files.xmlを削除してもボタンの位置ずれは変わりませんが、テキストボックスを下に動かすとボタンが重ならないようになりました。

    テキストボックスの初期位置かサイズを少し下方向にしておくと良いようですね。

  4. ぬっき~ より:

    @かこん さま

    JoinMP4Files.xmlを削除しても変わらないとすると、オートスケール関連ですかね。
    日本語版と英語版のシステムフォントやフォントサイズが違うのが原因かもしれません。

    Windows7日本語版の標準フォント「MS UI Gothic・9pt」だとズレないのですよ。。

    手元に英語版の環境がないので検証できなくて申し訳ないのですが、とりあえず手動で調整できてよかったです(^ ^;

  5. かこん より:

    その後、色々なMP4ファイルを結合してiTunesやiPhoneで見ていたのですが、不具合を見つけました。

    その問題はチャプターのタイムスタンプが対象フレームより僅かでも手前にあると、対象フレームよりも手前のキーフレームから再生が始まるようです。場合によっては数秒以上手前から再生になってしまいます。

    恐らくデコードの関係上、チャプターの開始点はキーフレーム上、もしくはその直後にないといけない気がします。ひょっとするとmp4boxで結合した時に僅かに結合点が後ろにずれてしまってるのかもしれません。

    そのようにずれてしまう問題に心当たりはありますか?

    試しにチャプターファイルのタイムスタンプ全てを1フレーム分遅延させてからチャプターを追加した場合、問題が起きなくなることを確認しました。

    例えば24fpsの場合は1/24=0.04秒遅らせると問題がなくなりました。

    mp4boxの場合ですと、ビデオトラックのMedia Durationをsamplesで割った時間が1フレームの時間になると思います。

    出来れば結合後の結合点のキーフレームが正確に分かれば良いのですが、もしそれが難しい場合、一つのアイデアとしては半フレーム分チャプター位置を後ろにずらすような桁上げ処理のようなオプションが考えられるかもしれません。

  6. かこん より:

    問題が出るmp4ファイルで色々と結合実験をしてみて分かったことを報告します。

    問題が出る時は結合後にDurationが長くなるみたいです。

    例えばa.mp4が10:00.000、b.mp4が20:00.000である場合、結合後のc.mp4が30:00.001となったりします。その場合、増えた0.001が前半部分だった場合、チャプターを10:00.000に打ち込むと、実際のキーフレームは10:00.001にあるので手前のキーフレームにジャンプしているようです。

    つまり、これを回避するためにはa.mp4のDurationにではなく、結合後のc.mp4のDurationの30:00.001からb.mp4のDurationの20:00.000を引いた位置、つまり10:00.001にチャプターを打たなければいけないみたいです。

    さらに実はこれだけでは直らないことがあります。個人的な予想ですがmp4boxのDurationの表示が丸められている可能性があります。

    つまり、上記の例ですと、a.mp4が10:00.000ではなく、実際には10:00.0001だったりしている可能性があります。この場合はチャプター位置を10:00.0011以降に指定しなければいけないので繰り上げて10:00.002にチャプターを打ち込まなければやはりキーフレームよりも前にずれてしまうこととなります。

    よって結論としては、結合後のDurationから後半部分のDurationを引いた位置から後ろに0.001ずらした位置にチャプターを打ち込めばうまく行くような気がします。

    このような対策を採っていただく事は可能でしょうか?

    とりあえず全チャプターを後ろに0.002ずらせば良さそうな気がするのでどうなるか試してみます。

  7. かこん より:

    とりあえず全チャプターを後ろに0.002ずらすというのは試しましたが駄目でした。
    なぜなら結合後のDurationが0.001どころではなく0.41や0.53と大幅に長くなる場合が多々あるからでした。

    ただ、「結合後のDurationから後半部分のDurationを引いた位置」というロジックはうまくいっているようで、さらに「後ろに0.001ずらした位置にチャプターを打ち込む」も行うと手動で試した限り完璧に機能するようでした。*ちなみに注意点としては当然ですがこれらのDurationはビデオトラックを基準として計算しなければなりません。

    チャプター位置の計算方法に是非このロジックを加えていただけないでしょうか?

    ついでにもう一つご提案があります。

    チャプターファイルですが、チャプター名を予め付与するようにはしていただけないでしょうか?

    現在は空白ですが、チャプターがとても多い場合、例えば100チャプターある場合なんかですとiPhoneではチャプターが短い場合に空白のチャプターが間引きされてしまうみたいです。試しにチャプター名を同じ「-」に設定してみたのですが、そうすると今度はiPhoneは同じチャプター名が連続する場合は重複するチャプターを無視してしまいます。

    よってチャプター名は「Chapter 1」などのように連番で振る必要があると思います。

    ちなみに、TMPGEnc Video Mastering Works 5の最新パッチでも同じような問題に対処したように見受けられます。
    『iPod/iPad/iPhone 向けのキーフレーム設定をチャプターとし て出力する機能を使用する場合、各クリップのチャプター名が空だった場合は[01]から始まる連番を名前に付与するようにしました。』
    http://tmpgenc.pegasys-inc.com/ja/download/tvmw5_rireki.html

    チャプター名は「Chapter」でも良いと思いますが、番号のみや「チャプター」と指定したい人もいるでしょうからオプションで指定できるとなお良いと思います。

    これも併せて対応をお願いできないでしょうか?
    よろしくご検討願いいたします。

  8. ぬっき~ より:

    @かこん さま

    色々とご報告ありがとうございます。

    結合後のDurationが若干大きくなることは認識していたのですが、チャプター位置とキーフレームの絡みまでは気が付きませんでした・・・
    言われてみれば確かにそうなりますね。

    検証していただいたDurationの計算方法については、通常モードであればおそらく対応可能と思われます。

    高速モードの場合は結合順番の関係から先頭からの位置をMP4BOXを使って実際に取得できない為に無理矢理算出しており、これが提案していただいたロジックと混合可能かは検証してみます。

    チャプター名もそんな挙動をするケースがあるとは・・・
    MP4というよりはApple製プレーヤーの仕様なんでしょうかね?

    とりあえず連番を振れるように対応してみます。

    しかし、、動画の世界は奥が深いですね。

    Durationひとつとっても。MediaInfo部分と映像トラックと音声トラックで微妙に差異があったりするので、私のような素人は頭を悩ませてしまいます。。(^ ^;

  9. かこん より:

    @ぬっき~ さま

    あれから少し考えてみたのですが、さらに「後ろに0.001ずらした位置にチャプターを打ち込む」というところですが、恐らく最悪を想定して0.003後ろにずらした方がいいかもしれません。結合の前半部分、後半部分、結合後と3つのDurationのそれぞれで切捨て、切り上げ、四捨五入を想定すると最悪時はそれぞれ0.001、合計0.003となると思うからです。確率的にはほとんどの場合0.001で十分だと思いますが、0.003ずらせば最悪のケースに対応できますし、3msならば333fpsですから十分誤差の範囲と言えるから大丈夫ではないでしょうか?

    >MP4というよりはApple製プレーヤーの仕様なんでしょうかね?

    そうだと思います。Appleと言ってもiTunesは大丈夫でiPhoneだけですのでユーザーの立場に立って良かれと思ってやっていることと思います。

  10. ぬっき~ より:

    @かこん さま

    早速ご提案いただいた内容を反映させた(つもりの)バージョンを公開してみました。

    処理内容としては A.mp4 + B.mp4 => C.mp4 という結合において、「C.mp4の映像トラックDuration」から「B.mp4の映像トラックDuration」を引いて3ms加算した位置を結合点としています。

    チャプター名の追加と、高速モードのチャプター位置の誤差も修正しておきました。

    うまくいくコトを祈っております(^ ^;

  11. かこん より:

    @ぬっき~ さま

    お忙しい中、早速の対応ありがとうございました。

    早速、数ファイルの結合を試した限りですとうまく動いているようです。
    これから150チャプターの高速結合を試してみますので数時間後には結果が分かると思います。

    ところで「高速モードのチャプター位置の誤差も修正」というのは具体的にはどのような修正だったのでしょうか?当方だと気づかなかったのでちょっと気になりました。