29

Matlab でビデオを作成する可能性は何ですか? 私は検索していて、主にこの分野で機能する3つのツールボックス、画像処理、画像取得、および制御ビジョンを見つけました...しかし、ビデオをゼロから作成するためだけに、それらなしでどのようにそれを行うことができますか? 概要を把握するためのさまざまなアプローチに興味がありますが、適切なチュートリアルや一貫した情報源をインターネット上で見つけることができませんでした。

助けてくれてありがとう!

4

4 に答える 4

49

(コア) MATLAB でムービーを作成するさまざまな方法を次に示します。

MOVIE2AVI

(非推奨、代わりに 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')

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')
于 2012-06-15T15:52:03.257 に答える
11

http://www.mathworks.de/help/techdoc/ref/videowriterclass.htmlがあります

print私のアプローチは、ファイル名のような関数を使用して単一のフレーム/図をpngファイルに印刷し1.png, 2.png, ...、無料のFFMPEGコンバーターを使用してビデオを作成することです。

ffmpeg -r 20 -i %d.png foo.avi

これにより、変換のパラメーター (ビットレート、コーデック、ジオメトリなど) に関して、多くの微調整が可能になります。

于 2012-06-15T13:20:27.830 に答える
7

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

于 2012-06-15T15:26:32.357 に答える
5

QTライター

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でホストされています。

于 2013-05-30T02:54:17.833 に答える