Linux で携帯ムービーを変換してみる

Linux 上で ffmpeg や mencoder を駆使しまくって、携帯ムービーを変換しようという試み。想定キャリアは、「vodafone」、「docomo」、「au」の3つ。「nokia」なんかについては、データが手に入らずに検証できなかったので除いとります。でも、「nokia」なんで、ねえ。

少し調べてみると、キャリアが同じでも様々なフォーマットがあることが判明。いま手元にある動画について、一覧にまとめてみた。

キャリア拡張子動画フォーマット音声フォーマット
docomoasfmpeg4g726
3gpmpeg4aac/amr
vodafone3gpmpeg4amr
AUamcmpeg4QCELP
3gp(3g2)mpeg4aac/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エンコーディングは、携帯ムービーの場合、あんま効果ないっぽい。つーか、実際目で見て違いがわからんかった。そもそもの品質が低いから当然ですか。ふーん。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/233





最新エントリー
転職しました
coLinuxで複数環境を作る
MySQLで実行中のSQLをキャンセルする
javascriptで簡単に経過ミリ秒を取得する方法
IFRAME では src 属性を必ず指定した方が良いわけ
Eclipse3.4 で javadoc を生成する
tomcat6.0.18 のEL不具合
PostgreSQLでMONTHS_BETWEEN
VB.NETでコンソール非表示のバッチアプリを作る
Enum Factory Pattern
あわせて読みたいブログパーツ