J'ai vu ce fil, qui fait presque exactement ce que je veux, mais je recherche en fait un fractionnement sur la détection de scène.
Par exemple, disons que j'ai une femme à l'écran de 0:01 -> 0:05, puis un homme dans une scène différente de 0:06 -> 0:09, et une deuxième femme à l'écran de 0:10 - > 0:14
Cela (idéalement) créerait trois clips vidéo différents. Je l'aimerais vraiment au niveau de l'image, si possible, avec une détection automatique lorsque les scènes changent.
** MIS À JOUR **
D'accord, je pars du bon pied. J'ai fait ce qui suit en utilisant FFProbe:
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt
Ce qui me donne une liste d'horodatages qui semblent tout à fait exacts! Maintenant, l'étape suivante - comment puis-je prendre cette liste d'horodatages et les saisir à nouveau dans ffmpeg pour la diviser? Voici un exemple d'horodatage.
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
la source
Réponses:
Vous pouvez directement utiliser
ffmpeg
pour détecter et extraire des scènes à la volée sans avoir besoin d'imprimer et d'analyser les informations sur les cadres:Le
-vsync vfr
est requis car l'extraction d'images ne fonctionne pas avec le taux de rafraîchissement variable par défaut, voir # 1644 .la source
More than 1000 frames duplicated
.Traitez votre texte pour obtenir vos horodatages et imprimez-les dans un fichier .txt, utilisez le .txt dans le segmenteur ffmpeg.
La précision ne sera pas parfaite et il y a beaucoup de problèmes que vous pouvez rencontrer à moins que vous ayez un contrôle total sur le contenu entrant.
Il convient de noter que ce type de travail est un sujet de recherche actuel, donc encore une fois, il peut produire des résultats imparfaits.
la source