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

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

Считайте системы координат, начинающиеся в требуемое время, или структурируйте индекс

Считайте часть видеофайла, начинающего 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 object. The axes object contains an object of type image.

В качестве альтернативы можно считать системы координат из видео, запускающегося в заданном индексе системы координат в конец видео при помощи 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- 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 object. The axes object contains an object of type image.

В качестве альтернативы можно считать все видеокадры целиком. read метод возвращает FrameSize- 141 массив видеокадров.

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

  allFrames      240x320x3x141            32486400  uint8              

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

  • 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').

Смотрите также

| | | |

Похожие темы