Aegisubという、字幕作成アプリケーションを使って動画用の字幕を作り、これを動画ファイルに焼き付ける際に、VirtualDubを使っていました。
当初、VirtualDubで直接AVIファイルが開けず、以下のようなエラーが出ました。
Couldn’t locate a decompressor for ‘mp42’ (Microsoft High-Speed MPEG-4 V2)
VirtualDub requires a Video for Windows (VFW) compatible codec to decompress video. DirectShow codecs, such as those used by Windows Media Player, are not suitable.
少しググってみたところ、AviSynthを使って開くことができるということが分かり、とりあえずこの方法で上手くいきました。
AviSynthをインストールした上で、avsファイルというスクリプトファイルを作ります(要するにテキスト)。このスクリプトは本当は奥が深いらしいですが、とりあえず開ければ良かったので、
DirectshowSource("pathToAvi.avi")
というのだけ書いて、avsファイルをVirtualDubで開くことで上手くいきました。
ところが幾つかの動画で作業していて、この方法でも別のエラーが発生するようになりました。
Avisynth open failure:
Avisynth error: YUY2 images for output must have a width divisible by 4 (use crop)!
幅サイズが不正で怒られているようです。
cropしろ、と言っているので、AviSynthのスクリプトでcropしようと思ったのですが、どうも勝手が分からず、もっとサクッと解決する方法はないのか、と探していたところ、そもそもAVIファイルが開けなかった件に関して、以下のようなページを見つけました。
MP42 Decompressor for VirtualDub – Video Codecs – MovieCodec.com
この中で、以下のサイトから”nAVI video codec – vids:nAVI, MP4, MP42, MP43 decompressors”なるものをダウンロードしてインストールしたら解決したよ、というのがあったので、とりあえず試します(この中にスパイウェアがあるとか、そんなもんないとかいう記述が上のページにあるので、自己責任でお願いします)。
”nAVI video codec – vids:nAVI, MP4, MP42, MP43 decompressors”というのは、
にあります。
ダウンロードして解凍すると、mpeg4xというフォルダができて、中には
mpeg4fix.inf
MPG4C32.DLL
READ THIS FIRST!.txt
の3ファイルが入っています。mpeg4fix.infを右クリックして「インストール」で完了です。
これでAVIファイルを直接開けるようになったのでは、と期待して、AviSynthを使わずVirtualDubに放り込んで見たところ・・・落ちました。
An out-of-bounds memory access (access violation) occurred in module ‘mpg4c32’…
…writing address 03A6FDB2…
…while decompressing video frame 0 (VideoSource.cpp:2141)…
…while using input buffer at 024fa728-024ff396 (VideoSource.cpp:2140)…
…while using output buffer at 03a70080-03b1f1c3 (VideoSource.cpp:2139).
状況が悪化しています(笑)。
ここでふと思い立って、avsファイルを単に
AVISource("pathToAvi.avi")
として開いてみたところ、ちゃんと開けました。
これで解決かと思ったのですが、字幕を焼き込んで出力してみると、白黒になった上斜めにぐにょーんと歪んだ変な動画が出力されています。
どの動画も同じ手順で保存したものなので、一体なぜこのファイルだけがうまくいかないのかよく分からないのですが、とりあえず何かコーデックが足りないのでは?と、
コーデックパック(詰め合わせ) – k本的に無料ソフト・フリーソフト
から、
Windows Essentials Codec Pack – k本的に無料ソフト・フリーソフト
をダウンロードしてインストールしてみるも、解決せず。
そこで最初のエラーメッセージに立ち返って、とりあえず4で割り切れる幅にcropしてみるか、と思い、avsファイルをこんな風にしてみました。
AVISource("pathToAvi.avi")
Crop(1,0,496,360)
これをもう一度VirtualDubで開いたところ、見事オープンは成功。いやまぁ、そのまんまなんですが・・。
ちょっと疑心暗鬼になりながら字幕を合成し出力したファイルを開いてみると、これもちゃんと開けます。
最後にMP4に圧縮するのですが、ビクビクしながら試したところ、これも成功。一件落着しました。
結論としては、最初に表示されたメッセージ通りcropすれば良かったのですが、ほぼ同じ条件で複数の動画を作業していて、このファイルだけこんな展開になった理由がよく分かりません。というかAviSynthを全く理解しないまま、やっつけで使っていたのがいけないのかと思いますが・・。
以上、あまり参考にならない迷走経緯でした。