How can sync a video to the plot?

조회 수: 4 (최근 30일)
Sujan Ponnappa
Sujan Ponnappa 2020년 1월 9일
I am trying to sync the video to the plot such that when the video plays(slicing a potato on a pressure sensor) the corresponding pressure signals are plotted.
But I am not able to sync the speed of the video to the speed of the plot.
I have also attached the video and the excel file of the pressure data to this .
Could anyone help me to solve this?
rng default
Fs = 24;
xs = potatoslicetimesync.Force;
ts = (0:length(xs)-1/Fs);
%plot(ts,xs)
%% Setup the subplots
ax1 = subplot(2,1,1); % For video
ax2 = subplot(2,1,2); % For pressure plot
%%% Setup VideoReader object
filename = 'slicesync.avi';
v = VideoReader(filename);
frameratevideo=v.FrameRate;
s = VideoWriter('C:\Users\Suj\Desktop\Master Thesis\Videos\slicesync.avi');
s.FrameRate = 500;
nFrames = v.Duration*v.FrameRate; % Number of frames
% Display the first frame in the top subplot
vidFrame = readFrame(v);
v.CurrentTime = 0;
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
%%% Load the pressure data
t = ts; % Cooked up for this example, use your actual data
y = xs;
nDataPoints = length(t); % Number of data points
step = round((nFrames/nDataPoints));
index = 1:0.55:nDataPoints;
i = 2;
% Diplay the plot corresponds to the first frame in the bottom subplot
h = plot(ax2,t(1:index(i)),y(1:index(i)),'-k');
% Fix the axes
ax2.XLim = [t(1) t(end)];
ax2.YLim = [min(y) max(y)];
%%% Animate
while hasFrame(v)
pause(1/v.FrameRate);
%pause(0.01)
vidFrame = readFrame(v);
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
i = i + 1;
set(h,'YData',y(1:index(i)), 'XData', t(1:index(i)))
end
%%% Load the pressure data
t = ts; % your actual data
y = xs;
nDataPoints = length(t); % Number of data points
step = round((nFrames/nDataPoints));
index = 1:step:nDataPoints;
i = 2;
% Diplay the plot corresponds to the first frame in the bottom subplot
h = plot(ax2,t(1:index(i)),y(1:index(i)),'-k');
% Fix the axes
ax2.XLim = [t(1) t(end)];
ax2.YLim = [min(y) max(y)];
%%% Animate
while hasFrame(v)
pause(1/s.FrameRate);
%pause(0.01)
vidFrame = readFrame(v);
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
i = i + 1;
set(h,'YData',y(1:index(i)), 'XData', t(1:index(i)))
end

답변 (0개)

카테고리

Help CenterFile Exchange에서 Audio and Video Data에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by