Преобразуйте матрицу Matlab в видеофайл

Как преобразовать матрицу в видеофайл? Конкретно в формате yuv. Или сначала конвертировать в .avi, а потом в yuv. У кого-нибудь есть коды для этого? Первоначально это был файл .avi, затем я извлек все кадры в массив или структуру.

Я нашел это при переполнении стека и использовал его. Я создал 4D-структуру в Matble [высота ширина Y/U/V количество кадров]. Я использую qcif, поэтому его размер [176 144 3 150], но созданное видео было ошибочным. (все белое) Должен ли я сначала преобразовать его в RGB?

Orig; % 3D matrix
X = permute(Orig,[1 2 4 3]); % 4D matrix
movie = immovie(X,map); % map is the colormap you want to use

implay(movie);

Так же в моей программе исходный файл YUV сначала конвертировался в avi. Итак, моя структура кадров из файла avi.


person mc8    schedule 09.10.2013    source источник
comment
Вы уже смотрели на это: mathworks.com/help/matlab/ref/videowriterclass .html ?   -  person Dan    schedule 09.10.2013
comment
Да, но в настоящее время он не поддерживается моей версией Matlab.   -  person mc8    schedule 09.10.2013
comment
Тогда mathworks.com/help/matlab/ref/avifile.html ?   -  person Dan    schedule 09.10.2013
comment
Могу ли я создать файл avi из матрицы Matlab?   -  person mc8    schedule 09.10.2013
comment
... да, вы можете, вы читали пример во второй ссылке? Используйте avifile и addFrame   -  person Dan    schedule 09.10.2013
comment
как насчет того, чтобы сразу перейти к yuv?   -  person mc8    schedule 09.10.2013
comment
я действительно не понимаю avifile. входным аргументом является файл avi, который вы хотите создать. а вывод - это объект avi? Как я могу ссылаться на него из матрицы?   -  person mc8    schedule 09.10.2013
comment
Вы используете addframe, чтобы добавить к нему фрагменты вашей матрицы, как в их примере. avifile создает файл и инициализирует объект, addframe получает данные (кадр за кадром) в avi. Просто прокрутите 4-е измерение (или 3-е, если ваше изображение проиндексировано) и добавьте каждый фрагмент с помощью addframe   -  person Dan    schedule 09.10.2013
comment
@Dan, не могли бы вы сделать пример кода с использованием avifile для создания avi-файла, содержащего кадры матрицы, которая у меня есть в Matlab?   -  person mc8    schedule 09.10.2013


Ответы (1)


Я думаю, что это должно быть что-то вроде этого:

aviobj = avifile('example.avi','compression','None');

for frame = 1:size(M, 4)
    aviobj = addframe(aviobj, M(:,:,:,frame); %// This is assuming your image is a vector of RGB images. If it's a vector of indexed images then drop one : and make the loop go to size(M,3)
end

aviobj = close(aviobj);
person Dan    schedule 09.10.2013