Vi este hilo, que hace casi exactamente lo que quiero, pero en realidad estoy buscando dividirme en la detección de escenas.
Por ejemplo, supongamos que tengo una mujer en pantalla desde 0:01 -> 0:05, luego un hombre en una escena diferente desde 0:06 -> 0:09, y una segunda mujer en pantalla desde 0:10 - > 0:14
Esto (idealmente) crearía tres videoclips diferentes. Realmente me gustaría bajar al nivel de fotograma, si es posible, con autodetección para cuando cambien las escenas.
** ACTUALIZADO **
Ok, he tenido un gran comienzo. He hecho lo siguiente usando FFProbe:
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt
¡Lo que me da una lista de marcas de tiempo que parecen ser exactamente correctas! Ahora, el siguiente paso: ¿cómo tomo esta lista de marcas de tiempo y las ingreso de nuevo en ffmpeg para dividirla? Aquí hay un ejemplo de las marcas de tiempo.
media_type=video|key_frame=1|pkt_pts=972221|pkt_pts_time=10.802456|pkt_dts=972221|pkt_dts_time=10.802456|best_effort_timestamp=972221|best_effort_timestamp_time=10.802456|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=5083698|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.503364
media_type=video|key_frame=1|pkt_pts=2379878|pkt_pts_time=26.443089|pkt_dts=2379878|pkt_dts_time=26.443089|best_effort_timestamp=2379878|best_effort_timestamp_time=26.443089|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=12736403|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=1.000000
media_type=video|key_frame=1|pkt_pts=2563811|pkt_pts_time=28.486789|pkt_dts=2563811|pkt_dts_time=28.486789|best_effort_timestamp=2563811|best_effort_timestamp_time=28.486789|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13162601|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.745838
media_type=video|key_frame=1|pkt_pts=2627625|pkt_pts_time=29.195833|pkt_dts=2627625|pkt_dts_time=29.195833|best_effort_timestamp=2627625|best_effort_timestamp_time=29.195833|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13485087|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.678877
fuente
Respuestas:
Puede usarlo directamente
ffmpeg
para detectar y extraer escenas sobre la marcha sin necesidad de imprimir y analizar información de cuadros:Esto
-vsync vfr
se requiere porque la extracción de imágenes no funciona con una velocidad de fotogramas variable de forma predeterminada, consulte # 1644 .fuente
More than 1000 frames duplicated
.Procese su texto para obtener sus marcas de tiempo e imprímalas en un archivo .txt, use el .txt en el segmentador ffmpeg.
La precisión no será perfecta y hay muchos problemas con los que puede encontrarse a menos que tenga control total sobre el contenido entrante.
Vale la pena señalar que este tipo de trabajo es un tema de investigación actual, por lo que nuevamente, puede producir resultados imperfectos.
fuente