Cree una imagen cada XX segundos del video [FFMPEG]

4

Captura de pantalla: FilmStrip

Lo intenté ffmpeg -i video.mkv -vf fps=1 out%d.png

Pero está generando imágenes una por una. Necesito todas las miniaturas en una imagen. como en la captura de pantalla anterior.


fuente

Respuestas:

4

ingrese la descripción de la imagen aquí

ffmpeg -i input -filter_complex \
"select='not(mod(n,30))',scale=120:-1,tile=layout=3x2" \
-vframes 1 -q:v 2 output.jpg
  • seleccione un cuadro cada 30 segundos
  • escale cada cuadro a un tamaño más pequeño (alternativamente, puede escalar después del mosaico)
  • mosaico de cada cuadro en una imagen. El tamaño predeterminado de la cuadrícula es 6x5, por lo que es posible que tenga que ajustarlo layoutsegún la cantidad de imágenes que desee mostrar.

El proceso puede tomar algún tiempo dependiendo de la duración y el formato de su entrada.

lema
fuente
¿ fps=1Funcionaría igual que select='not(mod(n,30))'?
Damian Yerrick
@DamianYerrick Puede hacer eso en lugar de querer que se elija cada mosaico de un cuadro por segundo, pero no funcionará exactamente igual.
llogan
0

puedes usar algo como

ffmpeg -i video.mkv -filter:v "select=not(mod(n\,10)),setpts=N/((25)*TB)" -qscale:v 2 frame%03d.jpg
  • los selectcontroles que cuadros estás capturando (en este caso uno de cada 10)
  • los setpscontroles de la tasa de fotogramas y depende de su fuente - 25para PAL o 30000/1001de vídeo NTSC
  • qscale controla la calidad (escala de cuantificación) de los cuadros de salida de 2 (mejor) a 31 (peor)

acabo de notar su edición anterior, si eso le da los marcos que desea usar debería estar bien como punto de partida

entonces necesitará unir las imágenes en un solo activo utilizando una herramienta como ImageMagick

montage -background "transparent" -depth 8 -type TrueColorMatte frame??.jpg \
    -geometry 50x50 -tile 10x10 -matte -transparent "transparent" \
    -type TrueColorMatte -depth 8 allframes.jpg
Mamíferos fuera de lo común
fuente