- ベストアンサー
matlabで動画保存方法 - アニメーションの作成と正しい保存方法を教えてください
- 一次元偏微分方程式の解を格納した行列uをアニメーションとして表示したい場合、matlabを使用して動画を保存する方法があります。ただし、既存の方法で保存すると斜めに表示される問題が発生します。正しい保存方法をご教授ください。
- アニメーションとして表示させたい行列uの1行目から最後の行までの行ベクトルを順に表示する方法を考えています。現在はwaterfall関数を使用して表示していますが、正しい保存方法がわかりません。movie関数とmovie2avi関数を使用してアニメーションを作成し、aviファイルとして保存しましたが、保存されたファイルが斜めに表示される問題があります。
- 上記の問題を解決するために、正しいアニメーションの作成と保存方法を教えていただけませんか?アニメーションの作成にはmovie関数とmovie2avi関数を使用し、アウトプットとしてaviファイルを取得したいです。斜めに表示される問題を解消するために、適切な操作を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A No.2のKulesです。 >> imwrite(M,'sample','gif') Mは100行の配列ですよね? imwriteは「画像を一枚書き込む」ための関数なので、 配列で保存された画像を一度に保存することはできなかったような気がします。 (そもそも私がimwriteを提案するのは、「画像サイズやループ回数によってメモリ不足になるのを回避するため」なので、 ループ中の画像データを一度全て持つ形で使うことは考えていません) 使うとしたら、 一度目は imwrite(画像データ、'ファイル名','gif'); で二度目以降は imwrite(画像データ、'ファイル名','gif','writemode','append'); という感じでしょうか。 そういえば昔gifじゃなくてavi形式でも同じようにやってたなあ…と思い過去のファイルを漁ってたら見つかりました。 aviobj=avifile('sample.avi'); でsample.aviにアクセスするためのファイルポインタ(のようなもの?)が作られるので、 後はループ内で addframe(aviobj,一枚分の画像データ); とすることでメモリ不足を気にすることなくaviファイルを作ることができます。 参考になれば幸いです。
その他の回答 (2)
- Kules
- ベストアンサー率47% (292/619)
avi形式のファイルで保存することを考えなければ gif形式でimwriteという手もありますかね。 http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/imwrite.html WriteModeをappendにすることでgifアニメーションファイルが作れます。 コマおくりはDelayTimeで調整する感じで。 movie2aviはいっかい画像全部を変数として持つ形になるので コマ数が増えると対応できないんですよね… お望みの答えではないかも知れませんが。 参考になれば幸いです。
お礼
ありがとうございます! >>hold on; M = moviein(100); for j = 1:100 waterfall(u(j,:)); view([44 62]); M(:,j) = getframe; end hold off; >> movie(M) >> imwrite(M,'sample','gif') としてみたのですが,以下のようにエラーが出ました・・ このデータ構造だとMは保存できないのでしょうか・・・? ??? Error using ==> imwrite>validateSizes at 596 Unsupported image datatype 'struct'. Error in ==> imwrite at 422 validateSizes(data);
- m0r1_2006
- ベストアンサー率36% (169/464)
matlab の movie2avi は,windows XP 32bit で matlab2007 くらいまでは動いてましたが, その後は,codex が無いとかエラーはきまくりでした. OS は, windows で良いのでしょうか? png に保存して ffmpeg というフリーソフトで avi 作った方がましです. FIG フォルダをすぐ下に作る for j = 1:100 waterfall(u(j,:)); view([44 62]); print('-dpng',['FIG/FIG',num2str(j,'%04d'),'.png']); end で FIG フォルダに FIG0001.png から連番で FIG0100.png まで画像ファイルができます. あとは,FIG フォルダに ffmpeg を入れて cmd から, ffmpeg -r 10 -i "FIG%04d.png" -vcodec mjpeg -sameq out.avi とうてば,out.avi という動画ができます. -r 10 は 1秒間に 10 画像です.
お礼
ありがとうございます. そのような不具合についてはまったく知りませんでした. 教えて頂き本当にありがとうございます. ちなみにOSはlinuxなので,windowsとは違うかもしれませんが, 現状ではご指摘のようにエラーが見られるので, フリーソフトを試してみようと思います.
お礼
大変参考になりました! ご丁寧な指導,ありがとうございました!