Считайте все кадры видео, кадры, запускающиеся в требуемое время или кадры в интервале требуемого времени.
Этот пример показывает, как считать и хранить данные от всех кадров в видеофайле, отображает один кадр, и затем проигрывает все кадры в частоте кадров видео.
Создайте объект VideoReader, сопоставленный с файлом примера, xylophone.mp4.
vidObj = VideoReader('xylophone.mp4');Определите высоту и ширину кадров.
vidHeight = vidObj.Height; vidWidth = vidObj.Width;
Создайте массив структур фильма MATLAB®, s.
s = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),... 'colormap',[]);
Считайте один кадр во время с помощью readFrame, пока конец файла не будет достигнут. Добавьте данные от каждого кадра видео до массива структур.
k = 1; while hasFrame(vidObj) s(k).cdata = readFrame(vidObj); k = k+1; end
Получите информацию о массиве структур фильма, s.
whos sName Size Bytes Class Attributes s 1x141 32503552 struct
s 1 141 массив структур, содержа данные из 141 кадра в видеофайле.
Отобразите пятый кадр, сохраненный в s.
image(s(5).cdata)
Измените размер текущей фигуры и осей на основе ширины и высоты видео. Затем проигрывайте фильм однажды в частоте кадров видео с помощью функции movie.
set(gcf,'position',[150 150 vidObj.Width vidObj.Height]); set(gca,'units','pixels'); set(gca,'position',[0 0 vidObj.Width vidObj.Height]); movie(s,1,vidObj.FrameRate);
Закройте фигуру.
close
Считайте часть видеофайла, начинающего 0,5 секунды с начала файла.
Создайте объект VideoReader, сопоставленный с файлом примера, 'xylophone.mp4'.
vidObj = VideoReader('xylophone.mp4');
Укажите, что чтение должно начать 0,5 секунды с начала файла путем установки свойства CurrentTime.
vidObj.CurrentTime = 0.5;
Создайте оси, чтобы отобразить видео. Затем считайте кадры видео, пока конец файла не будет достигнут.
currAxes = axes; while hasFrame(vidObj) vidFrame = readFrame(vidObj); image(vidFrame, 'Parent', currAxes); currAxes.Visible = 'off'; pause(1/vidObj.FrameRate); end

Считайте часть видеофайла от 0,6 до 0,9 секунд.
Создайте объект VideoReader, сопоставленный с файлом примера, 'xylophone.mp4'.
vidObj = VideoReader('xylophone.mp4');
Создайте массив структур фильма MATLAB®, s.
s = struct('cdata',zeros(vidObj.Height,vidObj.Width,3,'uint8'),... 'colormap',[]);
Укажите, что чтение должно начать 0,6 секунды с начала файла путем установки свойства CurrentTime.
vidObj.CurrentTime = 0.6;
Считайте один кадр за один раз, пока CurrentTime не достигнет 0,9 секунд. Добавьте данные от каждого кадра видео до массива структур, s.
k = 1; while vidObj.CurrentTime <= 0.9 s(k).cdata = readFrame(vidObj); k = k+1; end
Просмотрите количество кадров в s.
whos s
Name Size Bytes Class Attributes s 1x10 2305432 struct
s 1 10 структура, показывающая, что были считаны 10 кадров.
Просмотрите свойство CurrentTime объекта VideoReader.
vidObj.CurrentTime
ans =
0.9333
Свойство CurrentTime теперь больше, чем 0.9.
Не мог считать последний кадр видеофайла:
Метод hasFrame может возвратить логический 1, (TRUE), когда значение свойства CurrentTime равно значению свойства Duration. Это происходит из-за ограничения в базовых используемых API.
Постарайтесь не искать на последний кадр в видеофайле путем установки свойства CurrentTime на значение близко к значению Duration. Для некоторых файлов эта операция возвращает ошибку при указании, что конец файла был достигнут, даже при том, что значение CurrentTime является меньше, чем значение Duration. Это обычно происходит, если длительность файла больше, чем длительность видеопотока, и нет никакого видео, доступного, чтобы читать около конца файла.
Не используйте свойство Duration ограничить чтение данных из видеофайла. Лучше считывать данные, пока файл не сообщает, что больше нет кадров, доступных в чтение. Таким образом, используйте метод hasFrame, чтобы проверять, существует ли кадр, доступный в чтение.
Производительность чтения видео на Windows® Systems:
Чтобы достигнуть лучшей видео производительности читателя на Windows для MP4 и файлов MOV, MATLAB использует аппаратное обеспечение машинной графики системы для декодирования. Однако в некоторых случаях использование видеокарты для декодирования может привести к более плохой производительности в зависимости от определенного аппаратного обеспечения машинной графики в системе. Если вы замечаете более медленную видео производительность читателя в своей системе, выключаете аппаратное ускорение путем ввода:
matlab.video.read.UseHardwareAcceleration('off')Аппаратное ускорение может быть повторно включено путем ввода:
matlab.video.read.UseHardwareAcceleration('on')
VideoReader | mmfileinfo | movie