google tag

My Soundcloud Channel --- Testing :D

Friday, September 22, 2006

今日のYouTube用ビデオエンコーディングの落としどころ

デジカメの動画ファイルをそのまま簡単にup出来るYouTubeだけれど、YouTube側でflvファイルに変換された結果、酷く音がずれてしまう、あるいはmencoderでエンコするとYouTube側で変換できない、あるいはmencoderそのものがズレを作る原因になってしまう、という事はこの前書いた通りなのだが、その後あれこれ試した結果、多少マシなやり方が見つかったのでメモとして書いておく事にする。

---
手持ちのデジカメの動画形式は sanyo MZ2が QT の mjpeg/PCM, canon IXY500が AVIの mjpeg/PCM である。これらをそのまま YouTubeに upすると数秒という大きな音ズレが発生してしまう。

撮影した複数の動画ファイルを一つにまとめる場合は mencoder をつかう。ただしmencoderでファイル形式やらコーデックやらを変えてしまうとそれ自体が音ズレやYouTube変換エラーの原因になってしまうので元のままの形式にしておく。例えばこんな感じ。

mencoder MVI_0001.AVI MVI_0002.AVI MVI_0003.AVI -oac copy -ovc copy -o movie.avi

これをそのままYouTubeにUPすると大幅に音ズレするし、コーデックがmjpeg/PCMのままなのでファイルがデカくてupに時間がかかると良い事がないので、 mpeg1に変換してしまう。
今回の方法のミソは mencoderではなくffmpegを使う事である。 ふとffmpegを試してみたら、よい結果が得られたのだ。例えば

ffmpeg -i movie.avi -r 30 -ar 22050 movie.mpg

-r 30 -ar 22050 というのは フレームレート 30, サンプリングレート 22050という指定。デジカメ動画のフレームレートは15だったりするのだが、 ffmpegで15というのは受け付けてくれないので30にしている。 ( 音声サンプリングレートはもっと低くても良いかもしれない...CDの441000の半分と言うことで22050 )

こうして ffmpegでエンコした mpegムービーを YouTubeにUPしてみると、音ズレがまぁこんなもんか、という程度に収まった。やはり若干の遅れはあるけれど...

前回と比較して、この程度に改善したという例として結果を貼っておこう。

↓↓canon IXYのaviファイルをそのままuploadした場合



いや〜これは酷いですねぇ、演奏が酷いのは置いといて ^^;) 音も遅れ過ぎて画像と全然合ってない。

↓↓同じcanon IXYのaviファイルをffmpegでmpegにエンコしてからuploadした場合



ん〜 大分ましになりましたな〜...ぴったりは合ってないけれど...

おまけに、
sanyo MZ2のmov (QT)ファイルを ffmpegでmpegにエンコした場合



---
なお 過去にYouTubeから落とした Flashで見る限りにおいては音ズレのなかったflvファイルが mplayerの新バージョンで、とんでもなく音ズレを起こす件は、落としたflvファイルを上記と同様にffmpegでmpegに変換してやるとズレなくなった事も付け加えて置こう。
mplayerはmakeのしかた、バージョンによって結果が変わったりするから要注意なのであるが、最悪mpegに変換、という手もある....