¿Cómo puedo convertir un archivo de video en una secuencia de imágenes, por ejemplo, un cuadro cada N segundos? ¿Puede mplayer o ffmpeg hacer esto? He usado MPlayer para tomar capturas de pantalla manualmente, pero me gustaría automatizar esto para un video largo.
71

Respuestas:
Es muy simple con ffmpeg, y puede generar un cuadro cada N segundos sin secuencias de comandos adicionales. Para exportar como una secuencia de imágenes, simplemente use
myimage_%04d.pngo similar como la salida. El%0xdbit se convierte en un número entero dexdígitos rellenos con ceros de largo: el ejemplo que proporcioné se muestra comomyimage_0000.png,myimage_0001.png,myimage_0002.pngetc.
Puede usar muchos formatos de imágenes fijas, png, jpeg, tga, lo que sea (consulte
ffmpeg -formatsla lista completa).Bien, ahora sabemos cómo exportar la película como una secuencia de imágenes, pero ¿no queremos exportar cada fotograma?
El truco es simplemente cambiar la velocidad de fotogramas de la salida a lo que queramos usando la
-r nopción dondenestá el número de fotogramas por segundo. Sería 1 cuadro por segundo, sería-r 1un cuadro cada cuatro segundos, sería-r 0.25un cuadro cada diez segundos-r 0.1y así sucesivamente.Entonces, para ponerlo todo junto, así es como se vería guardar un fotograma de
input.movcada cuatro segundosoutput_0000.png,output_0001.pngetc.Tenga en cuenta que la
-r 0.25opción va después de la-i input.movparte, porque controla la velocidad de fotogramas de la salida . Si lo coloca antes de la entrada, trataría el archivo de entrada como si tuviera la velocidad de fotogramas especificada.Cambie el% xd a la cantidad de dígitos que necesite, por ejemplo, si el comando crearía más de 10,000 cuadros, cambie el
%04da%05d. Esto también funciona para archivos de entrada que son secuencias de imágenes. Lee más aquí .Usuarios de Windows : en la línea de comando, use
%ejemplo:
ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.pngEn las secuencias de comandos CMD y BAT, use
%%ejemplo:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.pngEntonces, doble
%%en los scripts y solo%en la línea de comandos interactiva. Hacerlo mal en cualquier situación generará un error.fuente
-rsi quiero exportar cada cuadro? Si conozco el FPS del video, supongo que lo ingreso, pero ¿y si no lo hago?jpegsesto, a menos que esté seguropngde que es lo que quiere. En mi caso, losjpegs tenían unos 50 kb cada uno, y lospngs tenían unos 2 MB.-q:v 1es una opción muy útil en este caso como en superuser.com/questions/318845/...guardará un marco como un archivo jpeg cada 5 segundos.
Sin embargo, no se detendrá al final del archivo, continuará produciendo copias del último fotograma. Para evitar esto, encuentre la duración del video en segundos, utilizando otro reproductor o con mplayer:
y busque una línea como "ID_LENGTH = 147.00".
Resta 2 de la longitud y usa este valor para la
-endposopción. Por ejemplo, para un video de 147 segundos:fuente
mpv --vo=image --sstep=5 movie.mkvfunciona muy bien sin el error antes mencionado ( mpv es una bifurcación de mplayer) usando mpv 0.27.0 en Debian.Con
ffmpeg, puede hacer lo siguiente:Este comando genera una miniatura de JPG de 320 × 240 en el cuarto segundo del video. Ponga esto en un script que cambie la hora y el nombre del archivo y ya está.
Más información: cree una imagen en miniatura cada X segundos del video
fuente
-ss positionbandera para buscar más en el archivo?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported-ssantes del-ipara que la búsqueda ocurra antes de que el video de entrada se decodifique. Esto debería acelerarlo. fuenteSi buscas una especie de hoja de contactos y estás trabajando con un sistema operativo tipo Unix, puedes usar este elaborado script, llamado al punto Video Contact Sheet * NIX , short vcs .
En segundo plano, también usa
ffmpeg(por defecto) omplayer, por lo tanto, puede manejar muchos formatos de video. Automatiza el proceso de capturar imágenes fijas de la película y las compone en una imagen con algún encabezado y pie de página. Puede elegir, por ejemplo, cuántas capturas desea o, alternativamente, las diferencias de tiempo entre ellas.Para un intervalo de 10 minutos, la invocación es así:
Consulte la lista completa de opciones de línea de comandos para otros ajustes.
Aquí hay un ejemplo de hoja de contacto, tomada de la página de inicio :
fuente
Con VLC 1.1.0 y superior, puede usar el filtro de video de escena:
Lo anterior guarda 1 de cada 24 cuadros (--scene-ratio = 24), comenzando a las 00:00:10 y terminando a las 00:00:11.
Acabo de probar y confirmar que esto funciona con VLC 2.0.3 en una nueva instalación de Windows 8 (no tengo complementos de video o software adicionales).
Documentación completa: http://wiki.videolan.org/How_to_create_thumbnails
fuente
VirtualDub puede hacer esto por ti
File->Export->Image sequencefuente
También puedes probar esto
Fuente de arriba
fuente
Puede omitir marcos en VirtualDub. Simplemente use la opción "Decimate By" ubicada en el menú Video -> Frame Rate. Por ejemplo, si configura "Decimar por 100", utilice Archivo -> Exportar -> Secuencia de imagen, guardará solo cada 100 cuadros.
fuente