(MATLAB R2013a)使用视频编写器保存视频,但无法保存标签和标题



对不起,我的英语:(不好希望你们能理解我的问题是什么。

拳头这是我的双摆模拟代码。

close all;clear all; clc;
theta1          = -pi;
dtheta1         = -5;
theta2          = pi/2;
dtheta2         = 10;
m1              = 1;
m2              = 1.7;
r1              = 1.3;
r2              = 1;
g               = 9.8;
duration        = 5;
y0 = [theta1;dtheta1;theta2;dtheta2;m1;m2;r1;r2;g];
[t,y] = ode45(@eqns,[0 duration],y0);
theta1          = wrapToPi(y(:,1));
dtheta1         = y(:,2);
theta2          = wrapToPi(y(:,3));
dtheta2         = y(:,4);
fps             = round(length(theta1)/duration);
X = zeros(length(theta1),3);
Y = zeros(length(theta1),3);
for i=1:length(theta1)
    X(i,:)=[0,r1*sin(theta1(i)),r1*sin(theta1(i))+r2*sin(theta2(i))];
    Y(i,:)=[0,-r1*cos(theta1(i)),-r1*cos(theta1(i))-r2*cos(theta2(i))];
end
mov = VideoWriter('Double Pendulum','MPEG-4');
set(mov,'FrameRate',fps,'Quality',100);
open(mov)
h = plot(0,0,'MarkerSize',30,'Marker','.','LineWidth',1.4);
range = 1.25*(r1+r2);axis([-range range -range range]); axis square;
xlabel('x');ylabel('y');title('Double Pendulum');
set(gca,'nextplot','replacechildren');
textlocation = range * 0.7;
hold on
for i=2:length(theta1)
    set(h,'XData',X(i,:),'YData',Y(i,:));
    plot([X(i-1,3) X(i,3)],[Y(i-1,3) Y(i,3)],'r')
    plot(X(i,2),Y(i,2),'g')
    frame = getframe;
    writeVideo(mov,frame);
end
close(mov);

这是结果,https://www.dropbox.com/s/7pyagcnhca6khb3/Double%20pendulum%20result.PNG

由于某种原因,标签和标题没有被记录下来,我也意识到颜色与我在 Matlab 中看到的颜色确实不同。我尝试使用"未压缩的AVI"而不是"MPEG-4"在颜色和质量方面给了我最好的结果,但文件大小为50MB,而"MPEG-4"的文件大小仅为560KB。

我想知道,是否有任何设置可以给我一个更好的文件(更接近我在 Matlab 中看到的),文件大小更小(我对这个 mp4 质量非常满意),标签将被记录下来。

多谢。

你问两个问题:
1.如何在不降低色彩质量
的情况下压缩视频 2. 如何捕获每个帧的标题和标签

我只回答你的第二个问题:

如果您阅读手册以了解getframe,您会发现默认情况下它捕获当前。为了捕获标签和标题,您需要捕获当前图形。因此,您需要的是将frame = getframe替换为

frame = getframe( gcf );

最新更新