Читать avi видео - Matlab

Я хочу прочитать файл AVI в Matlab. Пробовал по этой ссылке: http://inside.mines.edu/~whoff/courses/EENG512/lectures/other/Matlab_movies.pdf :

clear all
close all
movieObj = VideoReader('ap001_BL0_SP2_cam03_compressed.avi'); % open file
get(movieObj) % display all information about movie
nFrames = movieObj.NumberOfFrames; %shows 310 in my case
for iFrame=1:2:nFrames
    I = read(movieObj,iFrame); % get one RGB image
    imshow(I,[]); % Display image
end

Я получаю следующую ошибку:

Ошибка при использовании VideoReader/read (строка 145) Запрошенный индекс кадра находится за пределами конца файла.

Ошибка в test_video_read (строка 9) I = read(movieObj,iFrame); % получить одно изображение RGB

(Сокращено) Результат "get(movieObj)":

General Settings: 
   Duration = 10.3333
   Name = ap001_BL0_SP2_cam03_compressed.avi
   Type = VideoReader

Video Settings:
   BitsPerPixel = 24
   FrameRate = 30
   Height = 1280
   NumberOfFrames = 310
   VideoFormat = RGB24
   Width = 960

Таким образом, должна быть возможность прочитать первый кадр, так как доступно 310! Я могу воспроизвести файл AVI в VLC-Player, поэтому кодек уже должен быть установлен, верно?

Я использую MATLAB R2013a, Windows 7. Кто-нибудь может помочь, спасибо!


person T_W    schedule 11.10.2015    source источник


Ответы (2)


Плеер VLC построен с использованием кодеков ffmpeg. VideoReader использует API DirectShow и Media Foundation, которые являются API платформы Windows и отличаются от ffmpeg. Таким образом, если файл воспроизводится с помощью VLC, его открытие VideoReader не гарантируется. Пара вещей, которые вы можете сделать:

  1. Можно ли просмотреть файл в проигрывателе Windows Media? Если да, то в большинстве случаев он должен работать с VideoReader. Если нет, то у вас нет подходящих кодеков. Попробуйте установить пакет кодеков ffsdhow или K-lite.
  2. Если файл работает в проигрывателе Windows Media, но не поддерживает VideoReader, это указывает на ошибку. Обходной путь, который работал у меня в прошлом, заключается в том, что я устанавливаю кодеки, упомянутые выше, и пробую снова.
  3. Если (1) и (2) не помогают, используйте программное обеспечение, такое как ручной тормоз или Mirro, для перекодирования файла в MP4, который работает с помощью VideoReader.

Надеюсь это поможет.

Динеш

person Dinesh Iyer    schedule 12.10.2015
comment
Пришлось перекодировать видео (сделал с ручником - как и предлагалось). С ffshow не получилось. С K-lite я смог посмотреть видео с помощью WindowsMediaPlayer, но цвет не был оригинальным, и я не смог прочитать его в Matlab... так что я думаю, что все еще что-то не так. Я преобразовал его в *.mp4 и смог без проблем прочитать его в Matlab. Спасибо за быстрые ответы! - person T_W; 12.10.2015

Я протестировал ваш код Matlab, используя некоторые файлы avi, и у меня нет проблем с ними. Итак, я думаю, что это ваш файл avi вызывает ошибку.

У меня была аналогичная проблема раньше, когда мои фильмы (mp4) можно было воспроизводить в любых медиаплеерах, но Matlab не может их открыть. В моем случае проблема в формате пикселя при компиляции фильмов mp4 (с помощью ffmpeg). По умолчанию мои фильмы были скомпилированы в формате High 4:4:4 Predictive (yuv444p), но Matlab не может с этим справиться. Когда я переключился на более старый формат пикселей (yuv420p), у меня не было проблем с загрузкой фильмов в Matlab.

Вы можете проверить, является ли это проблемой, используя ffprobe, который является частью ffmpeg, и вы можете загрузить их с https://www.ffmpeg.org.

Иначе пробовали с несжатым avi?

person wtong    schedule 12.10.2015