Matlab でビデオを作成する可能性は何ですか? 私は検索していて、主にこの分野で機能する3つのツールボックス、画像処理、画像取得、および制御ビジョンを見つけました...しかし、ビデオをゼロから作成するためだけに、それらなしでどのようにそれを行うことができますか? 概要を把握するためのさまざまなアプローチに興味がありますが、適切なチュートリアルや一貫した情報源をインターネット上で見つけることができませんでした。
助けてくれてありがとう!
(コア) MATLAB でムービーを作成するさまざまな方法を次に示します。
(非推奨、代わりに VIDEOWRITER を使用)
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z); axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');
%# preallocate
nFrames = 20;
mov(1:nFrames) = struct('cdata',[], 'colormap',[]);
%# create movie
for k=1:nFrames
surf(sin(2*pi*k/20)*Z, Z)
mov(k) = getframe(gca);
end
close(gcf)
%# save as AVI file, and open it using system video player
movie2avi(mov, 'myPeaks1.avi', 'compression','None', 'fps',10);
winopen('myPeaks1.avi')
(非推奨、代わりに VIDEOWRITER を使用)
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z); axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');
%# create AVI object
nFrames = 20;
aviobj = avifile('myPeaks2.avi', 'fps',10);
%# create movie
for k=1:nFrames
surf(sin(2*pi*k/20)*Z, Z)
aviobj = addframe(aviobj, getframe(gca));
end
close(gcf)
%# save as AVI file, and open it using system video player
aviobj = close(aviobj);
winopen('myPeaks2.avi')
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z); axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');
%# create AVI object
nFrames = 20;
vidObj = VideoWriter('myPeaks3.avi');
vidObj.Quality = 100;
vidObj.FrameRate = 10;
open(vidObj);
%# create movie
for k=1:nFrames
surf(sin(2*pi*k/20)*Z, Z)
writeVideo(vidObj, getframe(gca));
end
close(gcf)
%# save as AVI file, and open it using system video player
close(vidObj);
winopen('myPeaks3.avi')
(技術的には動画ではなくGIFアニメです)
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z); axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');
%# preallocate
nFrames = 20;
f = getframe(gca);
[f,map] = rgb2ind(f.cdata, 256, 'nodither');
mov = repmat(f, [1 1 1 nFrames]);
%# create movie
for k=1:nFrames
surf(sin(2*pi*k/20)*Z, Z)
f = getframe(gca);
mov(:,:,1,k) = rgb2ind(f.cdata, map, 'nodither');
end
close(gcf)
%# create GIF and open
imwrite(mov, map, 'myPeaks4.gif', 'DelayTime',0, 'LoopCount',inf)
winopen('myPeaks4.gif')
http://www.mathworks.de/help/techdoc/ref/videowriterclass.htmlがあります
print
私のアプローチは、ファイル名のような関数を使用して単一のフレーム/図をpngファイルに印刷し1.png, 2.png, ...
、無料のFFMPEGコンバーターを使用してビデオを作成することです。
ffmpeg -r 20 -i %d.png foo.avi
これにより、変換のパラメーター (ビットレート、コーデック、ジオメトリなど) に関して、多くの微調整が可能になります。
Matlabには、ムービーを再生するための「movie」コマンドが組み込まれています。作業はとても簡単だと思います。私はそれをプロットで使用して時間の変化を示し、個々の画像を使用して実際の映画を作成しました。
http://www.mathworks.com/help/techdoc/ref/movie.html
一般的な手順は次のとおりです。
for ii=1:100
plot(something(ii))
F = getframe;
end
movie(F)
ムービーを保存するには、上記と同様の手順を使用できますが、
writeVideo
指図。
http://www.mathworks.com/help/techdoc/ref/videowriterclass.html
QuickTimeムービーをエクスポートするには、私自身の QTWriter を利用できます: http://horchler.github.io/QTWriter/。これは、Matlab のクラスと非常によく似た動作をVideoWriter
しますが、Matlab プロットの典型的なデータ (つまり、フレーム間圧縮なし) で適切に動作する非可逆および可逆の両方の静止画像コーデック (圧縮形式) を備えています。特に、アルファ チャネルの透明度(「Photo PNG」コーデック)、ループ(2 種類)、および連続可変フレーム レートもサポートしています。QTWriter は単一の Matlab クラス ファイルとして記述されており、すべてのプラットフォームで動作するはずですが、Windows ではテストしていません。
簡単なループ、可変フレーム レートの QuickTime ムービーを生成する方法を示すサンプル コードを次に示します。
% Prepare new movie file using the default PNG compression
movObj = QTWriter('peaks.mov');
% Create an animation
hf = figure; Z = peaks; surfc(Z); frames = 100;
axis tight; set(hf,'DoubleBuffer','on');
set(gca,'nextplot','replacechildren');
% Animate plot and write movie
for k = 0:frames
hs = surfc(sin(2*pi*k/frames)*Z,Z);
set(hs,'FaceColor','interp','FaceLighting','phong');
light('Position',[0 0 4]);
movObj.FrameRate = k; % Vary the frame-rate
writeMovie(movObj,getframe(hf)); % Write each frame to the file
end
movObj.Loop = 'backandforth'; % Set palindromic looping flag
close(movObj); % Finish writing movie and close file
出力ムービー、別のより複雑なデモ、および詳細は、プロジェクトの Web サイト で入手できます。QTWriter はオープン ソース ( BSD ライセンス) であり、コード リポジトリはGitHubでホストされています。