Manera rápida de extraer imágenes de video usando FFmpeg

Manera rápida de extraer imágenes de video usando FFmpeg

Estoy usando FFmpeg para extraer imágenes de un video, 1 fotograma cada 6 segundos:

Normal command on Dos ( Windows 8 OS) >  ffmpeg -i in.mkv -r 1/6 %4d.png

Lleva demasiado tiempo ya que la velocidad es muy baja, alrededor de 15-20.

Así que uséskip_frame nokey

ffmpeg -skip_frame nokey -i "in.mkv" -vsync 0 -frame_pts true -r 1/6 %4d.png

Este extrae a mayor velocidad, alrededor de 200 (diez veces más rápido).
Pero el problema es que omite muchas imágenes y arroja un error:

la aplicación proporcionó dts no válidos y que no aumentaban monótonamente al muxer en la secuencia

Entonces usé este comando:

ffmpeg -i in.mkv -vf "select='if(not(floor(mod(t,6)))*lt(ld(1),1),st(1,1)+st(2,n)+st(3,t));if(eq(ld(1),1)*lt(n,ld(2)+1),1,if(trunc(t-ld(3)),st(1,0)))'" -vsync 0 %4d.png

(Proporcionado aquí -¿Cómo capturar los primeros X fotogramas cada X segundos en un PNG con FFmpeg?)

Esto me da una velocidad de 25-30.

¿Hay alguna forma de lograr una mayor velocidad -skip_frame?

Respuesta1

Ok, el código que publiqué arriba en la publicación original es la única solución que he encontrado hasta ahora para una extracción de imágenes más rápida. A veces me da velocidad hasta 50.

ffmpeg -i in.mkv -vf "select='if(not(floor(mod(t,6)))*lt(ld(1),1),st(1,1)+st(2,n)+st(3,t));if(eq(ld(1),1)*lt(n,ld(2)+1),1,if(trunc(t-ld(3)),st(1,0)))'" -vsync 0 %4d.png

Si está interesado en la extracción aleatoria de imágenes (basada en fotogramas clave) para obtener una mayor velocidad, utilice -skip_frame nokey.

información relacionada