Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(MATLAB R2013a)使用VideoWriter保存视频,但可以';t保存标签和标题_Matlab - Fatal编程技术网

(MATLAB R2013a)使用VideoWriter保存视频,但可以';t保存标签和标题

(MATLAB R2013a)使用VideoWriter保存视频,但可以';t保存标签和标题,matlab,Matlab,对不起,我的英语不好:(希望你们能理解我的问题是什么 首先,这是我的双摆模拟代码 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

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

首先,这是我的双摆模拟代码

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);
这是结果,

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

我想知道,是否有任何设置可以让我拥有一个更好的颜色(更接近我在Matlab中看到的颜色)和更低的文件大小(我对mp4的质量非常满意),并且标签会被记录下来

非常感谢。

你问了两个问题:
1.如何压缩视频而不造成过多的颜色质量下降
2.如何捕获每个框架的标题和标签

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

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

frame = getframe( gcf );

MPEG-4视频(
VideoWriter.getProfiles()
)的默认质量仅设置为75/100。您尝试过将其设置为100吗?这将稍微增加文件大小,但颜色精度可能会提高。不幸的是,MPEG-4/h.264不是大多数数字视频的最佳编解码器(有更好的h.264版本/配置文件,但Matlab似乎使用端口设置)。您可以尝试Motion JPEG 2000。或者,如果您不介意QuickTime,可以尝试my,它的编解码器非常适合Matlab类型的图形。从那里您可以转换为其他格式。我使用“set(mov,'FrameRate',fps,'Quality',100)”将我的质量设置为100,但颜色仍然非常糟糕。感谢您的建议,我将尝试您的QTWriter:)这实际上只获取xlabel ylabel和colorbar,如果存在,则不会获取标题或例如colorbar缩放。