ゆっくりMovieMaker4のFFmpegエンコードで出力した動画が再生できないときの対処法

manjubox.net

YMM4は、エンコード時にMediaFoundationとFFmpegが選べる。 音声の動画全体に占める割合は微々たるものだし、高音質なほうが良いかなと思って、320 kbpsが選べるFFmpegエンコードで出力している。

たまに、エラーも無く出力したのに再生できないことがある。

その度にエンコードし直すと時間が掛かってしまう。 再生できない原因と修復方法を調べたのでメモしておく。

MP4は複数の「box」で構成されている。 この内、mdat boxのサイズがなぜか間違って出力されるのが原因。

修復方法。

バイナリエディタを用意する。 私はHxDを使っているけれど、何でも良い。 選択した範囲のサイズを16進数で確認できる機能があると楽。

mh-nexus.de

「moov」という文字列で検索し、その4バイト前にカーソルを持ってくる。 関係無いところがたまたまmoovになっているかもしれないので、周囲がスクリーンショットの雰囲気と似ているところ。 最後のほうにある。

先頭に戻り、「mdat」という文字列の4バイト前を、Shiftを押しながらクリック。 バイナリエディタが違って範囲選択の方法が違うなら、それに合わせて。 選択した部分の長さを確認。 HxDならステータスバーに出ている。 0x7F5473C9。

mdatの前の4バイトがmdatのサイズなので、このサイズに書き換え。 バイナリエディタによっては初期設定が上書きではなく挿入かもしれないので、Insertキーとかで切り替える。

保存して再生できたらOK。

あと、エンコード中にエラーで止まることもあった。 これはエンコード前にゆっくりMovieMaker4を再起動するようにしたら、見ることが無くなった。