Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Convertir entre secuencias de imágenes y vídeo

Este ejemplo muestra cómo convertir entre archivos de vídeo y archivos de secuencias de imagen mediante VideoReader y VideoWriter.

El archivo de muestra 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 objeto VideoReader

Cree un objeto VideoReader para leer los fotogramas del archivo de muestra.

shuttleVideo = VideoReader("shuttle.avi");

Crear una 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 N.jpg, en el que N es el número de fotogramas de tres dígitos.

i = 1;

while hasFrame(shuttleVideo)
   img = readFrame(shuttleVideo);
   filename = sprintf("%03d",i)+".jpg";
   fullname = fullfile(workingDir,"images",filename);
   imwrite(img,fullname)    % Write to a JPEG file (001.jpg, 002.jpg, ..., 121.jpg)
   i = i+1;
end

Encontrar nombres de archivos de imagen

Encuentre todos los nombres de archivos JPEG en 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 secuencias de imágenes

Cree 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 i = 1:length(imageNames)
   img = imread(fullfile(workingDir,"images",imageNames{i}));
   writeVideo(outputVideo,img)
end

Finalice el archivo de vídeo.

close(outputVideo)

Ver el vídeo final

Cree un objeto VideoReader.

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

Cree un arreglo de estructuras a partir de los fotogramas del vídeo.

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

Dimensione una figura en función de la anchura y la altura del vídeo y, a continuación, reproduzca el vídeo una vez.

vf = figure(Position=[0 0 shuttleAvi.Width shuttleAvi.Height]);
imshow(mov(1).cdata,Border="tight")
movie(vf,mov,1,shuttleAvi.FrameRate)

Figure contains an axes object. The axes object contains an object of type image.

Borrar objetos de VideoReader

Borre los objetos de VideoReader.

clear shuttleVideo shuttleAvi

Créditos

El vídeo del transbordador espacial es cortesía de la NASA.

Temas relacionados

Leer archivos de vídeo