How can we use 'SPMD' for 'VideoReader'?
6 ビュー (過去 30 日間)
古いコメントを表示
hi, I want to do do some video quality reduction fastly, I am using parallel computing , but this error is coming: 'Cannot call READ method after using READFRAME or HASFRAME methods or setting the CURRENTTIME property. Recreate the object to read a frame at a specific frame index'
my code is
videoSrc = VideoReader('rhinos.avi');
% v = VideoWriter('newfile.avi');
% open(v)
spmd
if labindex==1
v = VideoWriter('newfile.avi');
open(v)
for sr = 1:700
huo = read(videoSrc,sr);
RGB2 = imresize(huo, [300 NaN]);
writeVideo(v,RGB2)
% waitbar(sr / videoSrc.NumberOfFrames)
end
close(v)
else
R = rand(4,4);
end
end
0 件のコメント
採用された回答
Sean de Wolski
2016 年 6 月 16 日
Use readFrame() instead of read(). I'd also recommend building the videoSrc on the worker.
spmd
if labindex==1
videoSrc = VideoReader('rhinos.avi');
for ii = 1:700
if hasFrame(videoSrc)
huo = readFrame(videoSrc);
else
break
end
end
end
end
0 件のコメント
その他の回答 (1 件)
Steven Lord
2016 年 6 月 16 日
Writing video to a file seems like an inherently serial operation since you care about the order in which the frames are written to the file. So I wouldn't try to parallelize this.
Picture watching Star Wars if the Death Star exploded first, then Princess Leia was rescued, then Luke and Obi-Wan met Han Solo in the cantina, then Luke was flying his X-Wing toward the Death Star trench. It doesn't really make sense out of order, does it?
参考
カテゴリ
Help Center および File Exchange で Parallel Computing Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!