Comando FFmpeg para encontrar el fotograma clave más cercano al 3er minuto


1

Uso FFmpeg para extraer un fotograma clave en el 3er minuto. Esto significa que es el marco 3 * 60 * 25 (suponiendo 25 FPS). Ahora, a menudo este marco no es un fotograma clave.

Quiero extraer un cuadro más cercano al cuadro anterior pero asegurarme de que sea un fotograma clave. Esto significa que el cuadro puede ocurrir unos segundos antes o después del tercer minuto del video.

¡He buscado por todas partes sin suerte! Estoy haciendo esto en Linux, así que si estás usando un FFmpeg con algo especialmente instalado o incluido, ¡házmelo saber!

Respuestas:


4

Usar -ssparámetro con selectfiltro funcionaría.

Algo similar a:

ffmpeg -ss 180 -i yourvideo.mp4 -vf select="eq(pict_type\,I)" -vframes 1 thumbnails.jpeg

¡Creo que es un intento justo! ¿Por qué lo rechazarías? De acuerdo, me perdí -vframes 1
d33pika

1
La parte importante es el concepto que usa -ss y el filtro de selección para elegir solo I cuadros. el OP puede entrenar una solución desde allí. ¡No tengo que alimentar con una cuchara una respuesta!
d33pika

Lo he intentado ¡Genera una imagen !, la posición de -ss antes o después de -i es de hecho una elección que hay que hacer. Creo que antes es más rápido, supongo que OP está bien con encontrar un fotograma clave después de 3 minutos, eso es una gran suposición, lo admito.
d33pika

Bien, lo probé nuevamente con las opciones colocadas de esa manera (también cambiando PICT_TYPE_Ia I), y funcionó ahora como se esperaba, +1 de todos modos (
eliminé

1
¿Has visto esto: superuser.com/questions/538112/… , he compartido lo que uso para elegir buenas miniaturas de un video.
d33pika

2

Si supone que el cuadro I más cercano a 00:03:00 aparece antes de esa marca de tiempo, tendrá que adivinar, ya que la longitud del GOP (el número de cuadros entre cada cuadro I) no es la misma para cada video Si conoce la longitud de su GOP, por ejemplo, 125 cuadros, comience 5 segundos antes de eso, a las 00:02:55, por ejemplo.

Tenga en cuenta que esto no tiene que ser una longitud fija. Los buenos codificadores colocarán un cuadro I en los cortes de escena en lugar de puntos fijos para lograr una mejor compresión y confiabilidad.

Entonces, cambiemos la entrada por la cantidad de tiempo que calculamos antes, usando -itsoffset.

Especificamos el selectfiltro para obtener solo fotogramas I y -vframespara recibir solo un fotograma. Finalmente, escribe eso en un .jpgarchivo.

ffmpeg -itsoffset -00:02:55 -i in.mp4 -filter:v select='eq(pict_type\,I)' -vframes 1 out.jpg

Probé esto con un video que originalmente tenía un cuadro P a las 00:03:00, y recibí el cuadro 13 después de eso, que es el comienzo de una nueva escena: un cuadro I.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.