Преобразуйте между видеофайлами и последовательностями файлов изображений с помощью VideoReader
и VideoWriter
.
Файл примера под названием shuttle.avi
содержит 121 кадр. Преобразуйте кадры в файлы изображений с помощью VideoReader
и функции imwrite
. Затем преобразуйте файлы изображений в файл AVI с помощью VideoWriter
.
Создайте временную рабочую папку, чтобы сохранить последовательность изображений.
workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')
Создайте VideoReader
, чтобы использовать для рамок считывания из файла.
shuttleVideo = VideoReader('shuttle.avi');
Цикл через видео, читая каждый кадр в ширину высотой 3 массивами под названием img
. Выпишите каждое изображение к файлу JPEG с именем в форме imgN.jpg
, где N является номером кадра.
| img001.jpg |
| img002.jpg |
| ...|
| img121.jpg |
ii = 1; while hasFrame(shuttleVideo) img = readFrame(shuttleVideo); filename = [sprintf('%03d',ii) '.jpg']; fullname = fullfile(workingDir,'images',filename); imwrite(img,fullname) % Write out to a JPEG file (img1.jpg, img2.jpg, etc.) ii = ii+1; end
Найдите все имена файлов JPEG в папке images
. Преобразуйте набор названий картинки к массиву ячеек.
imageNames = dir(fullfile(workingDir,'images','*.jpg')); imageNames = {imageNames.name}';
Создайте объект VideoWriter
, который создает файл Motion JPEG AVI по умолчанию.
outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)
Цикл через последовательность изображений, загрузите каждое изображение, и затем запишите его в видео.
for ii = 1:length(imageNames) img = imread(fullfile(workingDir,'images',imageNames{ii})); writeVideo(outputVideo,img) end
Завершите видеофайл.
close(outputVideo)
Создайте объект читателя.
shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));
Создайте struct фильма MATLAB из кадров видео.
ii = 1; while hasFrame(shuttleAvi) mov(ii) = im2frame(readFrame(shuttleAvi)); ii = ii+1; end
Измените размер текущей фигуры и осей на основе ширины и высоты видео, и просмотрите первый кадр фильма.
figure imshow(mov(1).cdata, 'Border', 'tight')
Воспроизведите фильм однажды в частоте кадров видео.
movie(mov,1,shuttleAvi.FrameRate)
Видео любезности Шаттла НАСА.