Matlab: запись файла avi - PullRequest
1 голос
/ 26 июля 2011

У меня проблема при создании avi-файла с помощью Matlab. Моя цель - использовать граничный фильтр для всего видео и сохранить файл в формате avi. Фильтр работает нормально, моя проблема - запись файла avi.

Мой код:

vidFile = VideoReader('video.avi');
edgeMov = avifile('edges','fps',30);

for i = 1:vidFile.numberofframes
  frameI = read(vidFile,i);
  frameIgray = rgb2gray(frameI);
  edgeI = edge(frameIgray,'canny',0.6);
  edgeIuint8 = im2uint8(edgeI);
  edgeIuint8(:,:,2) = edgeIuint8(:,:,1);
  edgeIuint8(:,:,3) = edgeIuint8(:,:,1);
  edgeMov = addframe(edgeMov,edgeIuint8);
end

edgeMov = close(edgeMov)

Когда цикл заканчивается и avifile закрывается, я иду воспроизвести видео, и оно говорит: «Проигрыватель Windows Media обнаружил проблему при воспроизведении этого файла». Я также безуспешно пытался использовать Media Player Classic и VLC, что привело меня к мысли, что проблема заключается в самом файле. С помощью GSpot я проверил файл, и он сказал, что заголовок AVI поврежден.

Повторная попытка цикла вернула точно такую ​​же проблему. Меня смущает то, что когда я запускаю цикл для меньшего числа кадров, например 30, видео записывается нормально, и я могу его смотреть. Размер видео, которое я пытаюсь преобразовать, превышает 1000 кадров, поэтому я не знаю, является ли размер проблемой?

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

2 голосов
/ 26 июля 2011

Я использовал следующее для создания AVI

edgeMov = avifile('video.avi','compression','Indeo5','fps',15,'quality',95); 

Дайте ему попытку.

...