こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【opencv】携帯動画の使用について

OpenCVが使えるaviファイルの種類はどういったものなのでしょう?
携帯の動画を取り込もうとffmpegというフリーソフトを使い3gpをaviに変換し、それを読み込もうとしたのですがcvCaptureFromAVI(filename)の値がNULLになるらしく、うまくいきません。
同一のプログラムで同じ場所に別のaviファイルを置いたらうまく動いたので、パスの指定ミスとかでは無いと思うのですが・・・

ちなみに、プログラム内からsystem関数を呼び出す形でffmpegを
使用し、system("\"C:~略~\\./ffmpeg\" -i \"test.3gp\" -vcodec mjpeg -acodec mp3 test.avi");という形で携帯の動画を変換しました。

携帯の動画(3gp)をOpencvで使えるようにする方法を教えてください。
よろしくお願いします。

投稿日時 - 2007-08-24 13:49:59

QNo.3282321

困ってます

質問者が選んだベストアンサー

「MediaCoderというソフトを使って変換し」てうまくいったなら、
それをまねてみてはどうですか?そのアプリは内部で ffmpeg を使って
変換しているのでないんですかね?コマンド処理らしいのが、
MediaCoder のウィンドウの下の方に出てるじゃないですか^^

MediaCoder のインストールフォルダの下の codecs ってフォルダに
コマンドライン用のプログラムがあるようですけど?
オプションのつけ方とかまねれば、system() にそれらの文字列を
渡して実行してやればうまくいきませんかね?^^

投稿日時 - 2007-08-25 00:23:02

お礼

codecsというフォルダをプログラムと同じフォルダにコピーし、MediaCoderのコマンド処理を真似たところ、avi変換・opencvでの
読み込み共にうまく実行することができました!!
ご助言ありがとうございます。

投稿日時 - 2007-08-25 01:04:47

ANo.9

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.11

あっ、すでにうまくいったのですね^^ よかったです。では^^

投稿日時 - 2007-08-25 01:09:30

ANo.10

MediaCorder0.6.0 っていうのをインストールしてみました。
「変換」の「コンソールウィンドウ表示切替」を選択して、
コンソールウィンドウを出して、変換実行すれば、内部の処理が見れるようですよ。それをまねればできるんじゃないですか?
コマンドラインのプログラムを動かしているようですし。ffmpeg のほかの
プログラムも使っていれば、MediaCorder のインストールフォルダに
あるやつを呼んでしまえばいいのでは?^^;

投稿日時 - 2007-08-25 01:08:21

ANo.8

http://darusuna.sakura.ne.jp/archives/6/mpeg4itune/mpeg4.html

というのもありました。ここでも AU は Debian ではどうのこうの言ってますね。他のLinuxOSやWindowsでもダメだとは書いてないですが。。

投稿日時 - 2007-08-24 23:15:50

ANo.7

「AU は普通の3gp形式ではないので他社携帯とは違います。」とかありましたね。
http://q.hatena.ne.jp/1181637587

上のURLからリンクされてる、以下のURLに、
なんとか変換したとか書いてるHPがありましたよ。

http://www.deftrash.com/blog/archives/2005/05/linux.html

投稿日時 - 2007-08-24 22:57:37

ANo.6

-ar オプションでレートを変えればうまくいくかもどうこう書いてますね^^

-ar 44100
-ar 22050
-ar 11025

とか試してみればいかがでしょう?^^

投稿日時 - 2007-08-24 22:43:00

お礼

迅速なご対応ありがとうございます。
おっしゃるとおりにしたところ、ffmpegでのエラー?は消えました。
ただ、ffmpegで変換したaviファイルはopencvが読み込んでくれません。
また、試しにMediaCoderというソフトを使って変換した所、opencv読込みがうまくいきました。ただ、できればプログラム上から呼び出したいので、ffmpeg等でうまくいくようにしたいです(もっとも私に動画拡張子変換プログラムをすんなり書く実力があれば別ですが(泣))
理由を調べるため、真空波動研Liteというソフトを使ってaviファイルの種類を調べてみました。
○:opencvで読み込めたケース
×:opencvで読み込めないケース

○[MediaCoderでの携帯動画を変換(形式XviD)]
176x144 12Bit XviD 1.1.2 Final 25.00fps 286f 168.83kb/s
INFOTAG [RIFF(AVI1.0)] 00:00:11.439 (11.439sec) / 250,112Bytes

×[ffmpegで変換したaviファイル]
176x144 24Bit Motion JPEG(MJPG) 15.00fps 172f 274.25kb/s
MPEG2.5-LayerIII 11.03kHz 64.00kb/s CBR Mono
[RIFF(AVI1.0)] 00:00:11.466 (11.466sec) / 500,008Bytes

×[QTConverterで変換したaviファイル]
176x144 16Bit 無圧縮 15.00fps 173f 6084.09kb/s
PCM 22.05kHz 16Bit 1ch 352.80kb/s
[RIFF(AVI1.0)] 00:00:11.533 (11.533sec) / 9,285,618Bytes

×[MediaCoderで変換したaviファイル(形式Motion JPEG)]
176x144 24Bit Motion JPEG(MJPG) 25.00fps 286f 518.00kb/s
INFOTAG
[RIFF(AVI1.0)] 00:00:11.439 (11.439sec) / 749,424Bytes

×[その他のaviファイル(一例)]
720x480 24Bit DV Codec(DVSD) / DV Codec(DVSD) 29.97fps 791f 28857.73kb/s
[RIFF(AVI2.0)] 00:00:26.393 (26.393sec) / 95,250,944Bytes
という結果になりました。

XVid形式で変換を行ったものがうまくいっているような気もしますが、
なんとも言えません。XVid形式の変換をサポートし、且つコマンドラインインターフェイスがあるものってないでしょうか?

投稿日時 - 2007-08-25 00:01:12

ANo.5

英語のHPですが、
http://www.maysville-linux-users-group.org/ftopic-172-0-days0-orderasc-.html
そのエラーメッセージはメジャーじゃない云々のあとに、
Hz の変換すればいいとか書いてました。

参考になりますか?

投稿日時 - 2007-08-24 22:34:29

ANo.4

ffmpeg が使用するバッファ領域が小さい(あるいは変換しようとしている
もとの 3gp ファイルが大きい)のが原因かもしれないってことですか^^

インストール時とかに、バッファサイズの指定のオプションなどあったんですか?

投稿日時 - 2007-08-24 22:08:16

補足

ffmpeg.exeは元々「携帯動画変換君」というフリーソフトをダウンロードした際に一緒についてきたので、そこから持ってきました。
ですので、バッファサイズの指定のオプションなどに関してはよく分かりません。

元の3gpファイルが大きいということは無いと思います。
今回試したのはせいぜい100KB程度の物ですし・・・

投稿日時 - 2007-08-24 22:26:29

ANo.3

拡張子を .3gp じゃなく、.3g2 に変更するとうまくいくとかありませんか?

投稿日時 - 2007-08-24 15:12:15

補足

ご返答ありがとうございます。
拡張子を.3g2にしてやってみましたが、これでもダメなようです。
ffmpegで変換しようとした際に、
lame:output buffer too smallというのが出るのが気になるんですが、
これはまったく関係ないですかね?
初心者なもので的外れな質問なかもしれませんが・・・(汗

投稿日時 - 2007-08-24 16:58:00

ANo.2

その失敗したという 3gp のファイルを、端末から、
コマンドラインで変換しようとしても失敗するのですか?

携帯は、ドコモ?それとも AU ですか?

投稿日時 - 2007-08-24 15:04:07

補足

拡張子変換自体の失敗というよりは、
opencvを使ってファイルを読み込むときに、
そこに存在するはずのaviファイルが見つからないという
状況になっている感じです。
恐らく、aviファイルの圧縮方法とかの違いによってopencvが対応
していないとかではないかと勝手ながら推測しているのですが、
どうしてよいのかさっぱり分からず・・・

ちなみに携帯はAUです。

投稿日時 - 2007-08-24 16:43:17

ANo.1

変換に失敗したファイルと変換に成功したファイルは同じ携帯から
取り込んだものですか?

QTConverter なんかではどうなんでしょう?
でも、プログラム内から呼び出したいということなら、
少なくともコマンドラインインターフェイスがないとダメですかね^^

投稿日時 - 2007-08-24 14:28:45

補足

すいません、説明不足でした。
別のaviファイルというのは、携帯から変換したものではなく、
ネット上で見つけた普通のaviファイル(320x240 12Bit XviD 1.1.2 Final 25.00fps 6523f 794.74kb/s MPEG2-LayerIII)です。

>QTConverterなんかではどうなんでしょう?
>でも、プログラム内から呼び出したいということなら、
>少なくともコマンドラインインターフェイスがないとダメですかね^^

QTConverterでの変換を試みましたが、読み込みに失敗してしまいました。できればプログラム内で呼び出したいので、コマンドラインインターフェイスがあるものの方がありがたいです。

投稿日時 - 2007-08-24 14:54:55

あなたにオススメの質問