He usado FFmpeg para extraer todos los fotogramas I de un archivo MKV/MP4, pero FFmpeg parece decodificar todos los fotogramas para hacerlo, por lo que lleva mucho tiempo si el archivo de vídeo es de 1080p y dura más de 10 minutos. Solo quiero que salte de un marco I a otro y los descargue en archivos JPG/PNG. Además, necesito saber la marca de tiempo del I-frame.
La otra opción era usar FFprobe para obtener marcas de tiempo para todos los fotogramas I, pero eso también decodifica todo el archivo.
Estoy intentando hacer algo similar a Avidemux. En Avidemux puedes pasar a cada cuadro I muy rápido simplemente presionando las teclas de flecha hacia arriba o hacia abajo, pero lo hace sin decodificar todos los cuadros B/P.
Respuesta1
Usar
ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png
skip_frame
le dice al decodificador que procese solo fotogramas clave. -vsync 0
(en este comando) conserva las marcas de tiempo. -frame_pts
establece la parte numérica del nombre del archivo de la imagen de salida para representar la marca de tiempo. La interpretación del número requiere que conozca la velocidad de fotogramas, por ejemplo, si la velocidad de fotogramas es 30, entonces un nombre de imagen de out75 corresponde a una marca de tiempo de 75/30 = 2,50 segundos. Puede agregar -r 1000
si desea que los números representen milisegundos.