subplotで複数​のplotを一つのf​igureウィンドウ​に描写した場合のキャ​プチャと動画保存につ​いて

21 ビュー (過去 30 日間)
Shotaro Suzuki
Shotaro Suzuki 2017 年 10 月 20 日
コメント済み: Shotaro Suzuki 2017 年 10 月 21 日
subplotで3つのplotを一つのfigureで描写しました。
このfigureウィンドウを1ステップごとにキャプチャし,動画保存したいのですが,下記のようなエラーが表示されます。
========================================================================================
警告: 圧縮タイプに 'None' を使用すると、Indeo5 圧縮方式を使えません。 詳細は、Mathworks Technical Solution 1-4G50RI を参照してください。 エラー: audiovideo.internal.aviwriter/addframe>ValidateFrame (line 283) フレームは 1135 x 945 でなければなりません。
エラー: audiovideo.internal.aviwriter/addframe (line 153) ValidateFrame(aviobj,width, height,dims);
エラー: movie2avi (line 64) avimov = addframe(avimov,mov);
========================================================================================
フレームサイズが1135*945でなければならないということですが,
できれば下記のコードのようにfigureサイズを指定して保存したいと考えています。
指定したfigureサイズでキャプチャ,保存の仕方をご存知の方がいらっしゃいましたらご教授願います。
for t=1:time
fig=figure;
fig.Units='centimeters';
fig.Position=[10,2,30,25];
subplot(2,3,[2,3,5,6])
plot(x1,y1)
subplot(2,3,1)
plot(x2,y2)
subplot(2,3,4)
plot(x3,y3)
M(t)=getframe(gcf);
close
end
movie2avi(M,'plot.avi','fps',5)
都合上plotの詳細は伏せていますが,ステップ毎に更新や上書きされるグラフになっています。

採用された回答

Takuji Fukumoto
Takuji Fukumoto 2017 年 10 月 20 日
movie2aviは最新のVer.では利用できないようでして、古いVer.をお使いでしょうか。
VideoWriterのオブジェクトを使うのが良いかと思います。 使い方についてはサンプルコードを添付しますので、参考にしてください。
仮に画像サイズを変えるときには M.cdata に画像データが格納されていますので、imresizeを使って書き込み前にサイズを変更することもできます。
M=getframe(gcf);
M.cdata = imresize(M.cdata,[600 800])
writeVideo(v,M.cdata)
その際のサイズはピクセルや圧縮/拡大比での指定になります。
  1 件のコメント
Shotaro Suzuki
Shotaro Suzuki 2017 年 10 月 21 日
回答いただきありがとうございます。
imresizeについては他のtoolboxが必要となるため使用できませんでしたが,
writeVideoを用いて動画作成することができました。

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!