Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

Convertir entre secuencias de imágenes y vídeo

Convierta entre archivos de vídeo y secuencias de archivos de imagen mediante VideoReader y VideoWriter.

El archivo de muestra llamado shuttle.avi contiene 121 fotogramas. Convierta los fotogramas a archivos de imagen mediante VideoReader y la función imwrite. Después, convierta los archivos de imagen a un archivo AVI mediante VideoWriter.

Configuración

Cree una carpeta de trabajo temporal para almacenar la secuencia de imágenes.

workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')

Crear un VideoReader

Cree un VideoReader para leer los fotogramas del archivo.

shuttleVideo = VideoReader('shuttle.avi');

Crear la secuencia de imágenes

Recorra el vídeo leyendo cada fotograma en un arreglo de ancho por alto por 3 llamado img. Escriba cada imagen en un archivo JPEG con un nombre con el formato imgN.jpg, en el que N es el número de fotogramas.

| img001.jpg|

| img002.jpg|

| ...|

| img121.jpg|

ii = 1;

while hasFrame(shuttleVideo)
   img = readFrame(shuttleVideo);
   filename = [sprintf('%03d',ii) '.jpg'];
   fullname = fullfile(workingDir,'images',filename);
   imwrite(img,fullname)    % Write out to a JPEG file (img1.jpg, img2.jpg, etc.)
   ii = ii+1;
end

Encontrar nombres de archivos de imagen

Encuentre todos los nombres de archivos JPEG de la carpeta images. Convierta el conjunto de nombres de imagen a un arreglo de celdas.

imageNames = dir(fullfile(workingDir,'images','*.jpg'));
imageNames = {imageNames.name}';

Crear nuevos vídeos con la secuencia de imágenes

Construya un objeto VideoWriter, que crea un archivo AVI Motion-JPEG de forma predeterminada.

outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)

Recorra la secuencia de imágenes, cargue cada imagen y luego escríbala en el vídeo.

for ii = 1:length(imageNames)
   img = imread(fullfile(workingDir,'images',imageNames{ii}));
   writeVideo(outputVideo,img)
end

Finalice el archivo de vídeo.

close(outputVideo)

Ver el vídeo final

Construya un objeto de lector.

shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));

Cree una estructura de película de MATLAB a partir de los fotogramas del vídeo.

ii = 1;
while hasFrame(shuttleAvi)
   mov(ii) = im2frame(readFrame(shuttleAvi));
   ii = ii+1;
end

Cambie el tamaño de la figura y los ejes actuales según el ancho y el alto del vídeo y vea el primer fotograma de la película.

figure 
imshow(mov(1).cdata, 'Border', 'tight')

Reproduzca la película una vez a la velocidad de fotogramas del vídeo.

movie(mov,1,shuttleAvi.FrameRate)

Créditos

Vídeo del transbordador espacial cortesía de la NASA.