Считывание кадров из видео, начиная с определенного времени или индекса кадра, считывание кадров в пределах заданного интервала или считывание всех кадров в видео.
Считывайте часть видеофайла, начиная с начала файла на 0,5 секунды. Затем считывают видео, начиная с индекса 100 кадра и заканчивая видеофайлом.
Построить VideoReader объект, связанный с файлом образца 'xylophone.mp4'.
vidObj = VideoReader('xylophone.mp4');Укажите, что чтение должно начинаться на 0,5 секунды от начала файла, задав значение CurrentTime собственность.
vidObj.CurrentTime = 0.5;
Считывайте видеокадры до тех пор, пока не будет достигнут конец файла с помощью readFrame способ.
while hasFrame(vidObj) vidFrame = readFrame(vidObj); imshow(vidFrame) pause(1/vidObj.FrameRate); end

Кроме того, можно считывать кадры из видео, начиная с указанного индекса кадра до конца видео, используя read способ. Укажите индексы для чтения как [100 Inf]. read возвращает все кадры, начиная со 100 до конца видеофайла.
vidframes = read(vidObj,[100 Inf]);
Прочитайте часть видеофайла, указав время или интервал кадров.
Считывайте видеокадры от 0,6 до 0,9 секунды. Сначала создайте объект видеопривода и массив структуры для хранения кадров.
vidObj = VideoReader('xylophone.mp4'); s = struct('cdata',zeros(vidObj.Height,vidObj.Width,3,'uint8'),'colormap',[]);
Затем укажите, что чтение должно начинаться на 0,6 секунды от начала файла, установив значение CurrentTime собственность.
vidObj.CurrentTime = 0.6;
Считывать по одному кадру за раз до CurrentTime достигает 0,9 секунды. Добавление данных из каждого видеокадра в массив структуры. Просмотр количества кадров в массиве структуры. s представляет собой структуру 1 на 10, указывающую, что считано 10 кадров. Для получения информации по отображению кадров в структуре s как фильм, см. movie страница ссылки на функцию.
k = 1; while vidObj.CurrentTime <= 0.9 s(k).cdata = readFrame(vidObj); k = k+1; end whos s
Name Size Bytes Class Attributes s 1x10 2305344 struct
Кроме того, можно считывать все кадры в указанном интервале с помощью индексов кадров. Например, укажите второй аргумент read как [18 27]. read метод возвращает FrameSize-by-10 массив указывает, что было прочитано 10 кадров.
frames = read(vidObj,[18 27]);
whos framesName Size Bytes Class Attributes frames 240x320x3x10 2304000 uint8
Считывайте все кадры из видео, по одному кадру или все кадры одновременно.
Создайте объект video reader и отобразите общее количество кадров в видео.
vidObj = VideoReader('xylophone.mp4');
vidObj.NumFramesans = 141
Считывайте все кадры по одному, используя readFrame и отобразить кадры.
while hasFrame(vidObj) frame = readFrame(vidObj); imshow(frame) pause(1/vidObj.FrameRate); end

В качестве альтернативы можно прочитать все видеокадры сразу. read метод возвращает FrameSize-по-141 массив видеокадров.
allFrames = read(vidObj);
whos allFramesName Size Bytes Class Attributes allFrames 240x320x3x141 32486400 uint8
hasFrame метод может возвращать логические 1 (true), когда значение CurrentTime свойство равно значению Duration собственность. Это связано с ограничением используемых базовых API.
Поиск последнего кадра в видеофайле путем установки CurrentTime к значению, близкому к Duration значение не рекомендуется. Для некоторых файлов эта операция возвращает ошибку, указывающую, что достигнут конец файла, даже если CurrentTime значение меньше, чем Duration значение. Обычно это происходит, если длительность файла больше, чем длительность видеопотока, и нет видео, доступного для чтения в конце файла.
Использование Duration свойство, ограничивающее чтение данных из видеофайла, не рекомендуется. Используйте hasFrame метод для проверки наличия кадра, доступного для чтения. Лучше всего читать данные до тех пор, пока файл не сообщит, что больше нет доступных для чтения кадров.
Производительность чтения видео в системах Windows ®: для достижения более высокой производительности чтения видео в Windows дляMP4 и MOV MATLAB ® использует графическое оборудование системы для декодирования файлов. Однако в некоторых случаях использование графической карты для декодирования может привести к снижению производительности в зависимости от конкретного графического оборудования в системе. Если вы заметили более низкую производительность устройства чтения видео, отключите аппаратное ускорение, введя :matlab.video.read.UseHardwareAcceleration('off'). Аппаратное ускорение можно повторно включить, введя: matlab.video.read.UseHardwareAcceleration('on').
mmfileinfo | movie | read | readFrame | VideoReader