电影创作录制错误的帧

时间:2015-10-20 03:34:18

标签: matlab animation video figure

angular.module("app", [])
.directive("myCheckbox", function(){
    return {
        restrict: "E",
        scope: true,
        link: function(scope, ele, attr){
            var iconChecked = "glyphicon-ok-sign";
            var iconUnChecked = "glyphicon-remove-sign";
            scope.icon = attr.status ? iconChecked : iconUnChecked;
            scope.name = attr.text;
            ele.bind("click", function() {
                attr.status = !attr.status;
            });

    },
        template: "<div><span><i class='glyphicon {{icon}}'></i><span>{{name}}</span></span></div>"
    };
});

上面的代码创建的电影只是每次只记录第一帧。我已经尝试了这些answers,(正如您在代码中看到的那样),但没有成功。

数据(部分内容):

function create_simulation( matrix_all,timesteps,num_agents )
mkdir('movies');
filename_mov='.\movies\vid1';
vidObj = VideoWriter(filename_mov,'Motion JPEG AVI');
set(vidObj,'Quality',100,'FrameRate',2);
%matrix_all='time','id','xcor','ycor'
time=matrix_all(:,1);
id=matrix_all(:,2);
x=matrix_all(:,3);
y=matrix_all(:,4);
colors=jet(num_agents);
min_x=min(x);max_x=max(x);min_y=min(y);max_y=max(y);
f=figure('renderer', 'zbuffer');
a = axes('Parent',f);
axis(a,'tight');
set(a,'nextplot','replacechildren');
open(vidObj);
for t=1:timesteps,
    t_filter=time==t;
    scatter(x(t_filter),y(t_filter),[],colors,'filled');   
    xlim([min_x max_x]);
    ylim([min_y max_y]); 
    xlabel(num2str(t));
    drawnow;
    writeVideo(vidObj, getframe(f));
end
close(vidObj);
end

最糟糕的情况我必须将所有图像写入磁盘并创建它的电影。

1 个答案:

答案 0 :(得分:1)

您正在正确地撰写视频。 问题是,大多数视频播放器都不会显示所有保存的帧以便缩短计算时间。这也会影响您保存视频的格式。

例如,如果您将视频保存在'Motion JPEG AVI'中,则会获得较大的压缩效果,而将其保存在'MPEG-4'时,压缩率会变小。

这里的重点是:如果您希望能够按原样看到视频,请将其保存为非常小/无压缩的文件类型。此外,永远不要相信VLC或任何其他视频播放器为您播放,如果您想检查帧,加载视频并检查它们。

您将看到如果您使用vidObj = VideoWriter(filename_mov,'MPEG-4');并在任何视频播放器中打开它,您将看到更改,但如果您以这种方式执行蚂蚁保存,并将它们加载到MATLAB再次,帧完全相同。