¿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.png
o similar como la salida. El%0xd
bit se convierte en un número entero dex
dígitos rellenos con ceros de largo: el ejemplo que proporcioné se muestra comomyimage_0000.png
,myimage_0001.png
,myimage_0002.png
etc.
Puede usar muchos formatos de imágenes fijas, png, jpeg, tga, lo que sea (consulte
ffmpeg -formats
la 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 n
opción donden
está el número de fotogramas por segundo. Sería 1 cuadro por segundo, sería-r 1
un cuadro cada cuatro segundos, sería-r 0.25
un cuadro cada diez segundos-r 0.1
y así sucesivamente.Entonces, para ponerlo todo junto, así es como se vería guardar un fotograma de
input.mov
cada cuatro segundosoutput_0000.png
,output_0001.png
etc.Tenga en cuenta que la
-r 0.25
opción va después de la-i input.mov
parte, 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
%04d
a%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.png
En las secuencias de comandos CMD y BAT, use
%%
ejemplo:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Entonces, doble
%%
en los scripts y solo%
en la línea de comandos interactiva. Hacerlo mal en cualquier situación generará un error.fuente
-r
si quiero exportar cada cuadro? Si conozco el FPS del video, supongo que lo ingreso, pero ¿y si no lo hago?jpegs
esto, a menos que esté seguropng
de que es lo que quiere. En mi caso, losjpeg
s tenían unos 50 kb cada uno, y lospng
s tenían unos 2 MB.-q:v 1
es 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
-endpos
opción. Por ejemplo, para un video de 147 segundos:fuente
mpv --vo=image --sstep=5 movie.mkv
funciona 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 position
bandera para buscar más en el archivo?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
antes del-i
para 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 sequence
fuente
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