Как сгенерировать видео из matlab без ошибок кодека? - PullRequest
2 голосов
/ 19 февраля 2011

Используя 64-битную машину Windows 7, я пытаюсь сгенерировать avi-файл из Matlab, используя последовательность

aviobj = avifile('test.avi', 'fps', 25);
% a loop of aviobj = addframe(aviobj, frame)
close(aviobj)

Однако созданный файл поврежден - с VLC он выглядит стриженым и с плохими цветамис Media Player это был черный экран, а с Divx Plus player он выглядит нормально, но выдает предупреждение.

Я пытался указать другие типы кодеков (через avifile('test.avi', 'fps', 25, 'compression', 'TYPE'), но Matlab, похоже, никогда не сможетчтобы найти этот кодек - я пробовал Indeo, cvid, MSVC, MRLE и многие другие, но Matlab просто выдает предупреждение «не поддерживаемый метод сжатия», а затем сразу вызывает ошибку, когда вызывается addframe.

Как я могу решить вышеуказанную проблему или, альтернативно, есть ли другой, простой способ просто сгенерировать avi, добавляя кадр за раз?

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Как сгенерировать видео из matlab без ошибок кодека?

попробуйте использовать mmwrite

http://www.mathworks.com/matlabcentral/fileexchange/15881-mmwrite

1 голос
/ 19 февраля 2011

Ну а после еще нескольких поисков в Интернете и экспериментов похоже, что другие тоже сталкивались с этой проблемой, и предложили просто использовать другую программу для ее сжатия, что также должно исправить файл, вот что я сделал:

  1. Создан несжатый файл
  2. Открыл его в VirtualDub (хорошее видео программное обеспечение с открытым исходным кодом, которое не требует установки)
  3. В меню видео я выбрал «сжатие» и выбрал «Microsoft Video 1» вариант
  4. Сохранение файла с помощью опции меню save-as

Теперь все проигрыватели, которые я пробовал, выглядят корректно, а размер файла меньше.

0 голосов
/ 14 апреля 2014

Я знаю, что отвечаю на очень старую ветку, но я помог моему брату с этим и узнал несколько вещей, которые могут помочь другим:

У моего брата было очень маленькое видео, результат МРТ.сканирование, 51x51 пикселей.Использование VideoWriter с профилем «Несжатый AVI» работало, но плохо работало в VLC.Virtualdub также выдавал ошибки.

Что исправило это, так это убедившись, что размеры видео, кратные 2. Видео 96x96 воспроизводилось нормально и также может быть перекодировано в XVID в virtualdub., с очень маленькими видео, установите режим вывода видео на wingdi в VLC.В режиме OpenGL или Direct3D и режиме наложения графический процессор выполняет масштабирование и интерполяцию пикселей между ними.

0 голосов
/ 09 декабря 2011

То, что вы описываете, что происходит в VLC, вероятно, связано с наличием разрешения, которое не поддерживается кодеком. Попробуйте разрешения, кратные 2,4,8,16, и посмотрите, что работает. VirtualDub, вероятно, как-то об этом позаботится.

В противном случае это действительно просто. Все, что вам нужно сделать:

aviobj = avifile('example.avi', 'compression', 'none', 'fps', 25);
for i=1:1000
    %generating the filenames
    filename = strcat(FolderName,'/frame', sprintf('%05d', i),'.bmp'); 
    I = imread(filename);
    aviobj = addframe(aviobj,I);                                               
end;
aviobj = close(aviobj);
...