Чтение видео файлов

Чтение систем координат с видео, начиная с определенного времени или системы координат индекса, чтение систем координат в течение заданного интервала времени или чтение всех систем координат в видео.

Чтение систем координат начинается в указанное время или индекс системы координат

Считывайте часть видеофайла, начиная с 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

Figure contains an axes. The axes contains an object of type image.

В качестве альтернативы можно считать системы координат из видео, начиная с заданного индекса системы координат и заканчивая видео при помощи read способ. Задайте индексы для чтения следующим [100 Inf]. The 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]. The read метод возвращает FrameSizeмассив -by-10, указывающий, что было считано 10 системы координат.

frames = read(vidObj,[18 27]);
whos frames
  Name          Size                    Bytes  Class    Attributes

  frames      240x320x3x10            2304000  uint8              

Чтение всех систем координат

Считывайте все системы координат из видео, по одной системе координат за раз или все системы координат сразу.

Создайте объект средства чтения видео и отобразите общее количество систем координат в видео.

vidObj = VideoReader('xylophone.mp4');
vidObj.NumFrames
ans = 141

Считывайте все системы координат, по одной системе координат за раз, используя readFrame метод и отображение систем координат.

while hasFrame(vidObj)
   frame = readFrame(vidObj);
   imshow(frame)
   pause(1/vidObj.FrameRate);
end

Figure contains an axes. The axes contains an object of type image.

Также можно считать все видеокадры сразу. The read метод возвращает FrameSize-by-141 массив видеокадров.

allFrames = read(vidObj);
whos allFrames
  Name             Size                      Bytes  Class    Attributes

  allFrames      240x320x3x141            32486400  uint8              

Поиск и устранение проблем и советы по чтению видео

  • The hasFrame метод может вернуть логический 1 (true), когда значение CurrentTime свойство равно значению Duration свойство. Это связано с ограничением в базовых используемых API.

  • Поиск последней системы координат в видео файла путем установки CurrentTime свойство к значению, близкому к Duration значение не рекомендуется. Для некоторых файлов эта операция возвращает ошибку, указывающую, что конец файла был достигнут, даже если CurrentTime значение меньше, чем Duration значение. Это обычно происходит, если длительность файла больше, чем длительность видеопотока, и нет доступного видео для чтения около конца файла.

  • Использование Duration свойство, ограничивающее чтение данных из файла видео, не рекомендуется. Используйте hasFrame метод для проверки наличия доступного для чтения системы координат. Лучше всего считать данные до тех пор, пока файл не сообщит, что больше нет доступных систем координат для чтения.

  • Эффективность чтения видео в системах Windows ®: для достижения лучшей эффективности считывателя видео в Windows для MP4 и MOV Файлы ® использует графическое оборудование системы для декодирования. Однако в некоторых случаях использование видеокарты для декодирования может привести к снижению эффективности в зависимости от конкретного графического оборудования в системе. Если вы замечаете более медленную эффективность устройства чтения видео в вашей системе, отключите аппаратное ускорение, набрав: matlab.video.read.UseHardwareAcceleration('off'). Можно восстановить аппаратное ускорение путем ввода: matlab.video.read.UseHardwareAcceleration('on').

См. также

| | | |

Похожие темы