Linux 上で ffmpeg や mencoder を駆使しまくって、携帯ムービーを変換しようという試み。想定キャリアは、「vodafone」、「docomo」、「au」の3つ。「nokia」なんかについては、データが手に入らずに検証できなかったので除いとります。でも、「nokia」なんで、ねえ。
少し調べてみると、キャリアが同じでも様々なフォーマットがあることが判明。いま手元にある動画について、一覧にまとめてみた。
| キャリア | 拡張子 | 動画フォーマット | 音声フォーマット |
|---|---|---|---|
| docomo | asf | mpeg4 | g726 |
| 3gp | mpeg4 | aac/amr | |
| vodafone | 3gp | mpeg4 | amr |
| AU | amc | mpeg4 | QCELP |
| 3gp(3g2) | mpeg4 | aac/amr |
今回は、上記のてんでバラバラ好き勝手な形式を、Windows Media Player で再生可能なように、 wmv 形式へと統一してみる。もちろん flv でも mpeg でも良いんだけど、まあ基本編ってことで。
先に結果を言ってしまうと、AU 端末が採用している amc 形式で、音声を変換することができなかった。これは、QCELPという音声CODECを、mencoder などでデコードできなかったことが原因。QCELP のデコード方法さえ分かればイケるはずなので、これは今後の課題に。QuickTime では再生できるから、きっと何とかなるんじゃないかと、淡い期待を抱いてますよ。もう、少年の瞳ですよ。(意味不明)
これ、裏を返すと、amc 形式以外については、音も映像も何とかなったっつー話です。おめでたい。拡張子が同じでも、内部的にCODECが異なったりしてたから、そこらへん無理矢理できるように考えてみた次第。以下、順番に紹介しときます。
まず、docomo の asf 形式。フレームレートを指定しなかったら、とんでもないことになったので、自然に見れるよう、適当に指定してみた。
# ffmpeg -y -i in.asf -vcodec wmv1 -acodec mp3 -r 15 asf_out.asf
次は、3GPP基準のもの。vodafone のは、ffmpeg 一発でいけたんだけど、au がうまくいかなかったんで、全部 mencoder を一度通してあげた。この「ムダ」が気になる人は、何かキャリアを判別する方法を考えて、それで分岐させりゃ良いでしょう。
# mencoder in.3gp -ovc lavc -oac pcm -lavcopts vcodec=wmv1 -o out.avi # ffmpeg -y -i out.avi -vcodec wmv1 -acodec mp3 out_3gp.wmv # rm out.avi
最後に問題の amc 形式。どうせ音声変換ができないんで、最初から音声はシカトで。
# mencoder in.amc -ovc lavc -nosound -lavcopts vcodec=wmv1 -o out.avi # ffmpeg -y -i out.avi -vcodec wmv1 -an out_amc.wmv # rm out.avi
mencoder と ffmpeg には有用な大量のオプションがあるんだけど、上の例では簡略化するために、かなり削ぎ落としてしまった。実際にはビットレートの指定とかもした方が良いんだろうなあ。まあ、その辺はニュアンスで色々やると吉ってことで。
なお、2PASSエンコーディングは、携帯ムービーの場合、あんま効果ないっぽい。つーか、実際目で見て違いがわからんかった。そもそもの品質が低いから当然ですか。ふーん。
Posted by dT by 17:07