Ich habe diesen Thread gesehen, der fast genau das macht, was ich will, aber ich suche tatsächlich nach Aufspaltung bei der Szenenerkennung.
Nehmen wir zum Beispiel an, ich habe eine Frau auf dem Bildschirm von 0:01 -> 0:05, dann einen Mann in einer anderen Szene von 0:06 -> 0:09 und eine zweite Frau auf dem Bildschirm von 0:10 - > 0:14
Dies würde (idealerweise) drei verschiedene Videoclips erzeugen. Ich würde es sehr gerne bis auf Frame-Ebene haben, wenn möglich, mit automatischer Erkennung, wenn sich die Szenen ändern.
** AKTUALISIERT **
Ok, ich habe einen großartigen Start hingelegt. Ich habe folgendes mit FFProbe gemacht:
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt
Das gibt mir eine Liste von Zeitstempeln, die genau richtig zu sein scheinen! Nun der nächste Schritt - wie nehme ich diese Liste von Zeitstempeln und gebe sie wieder in ffmpeg ein, um sie zu teilen? Hier ist ein Beispiel für die Zeitstempel.
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
quelle
Antworten:
Sie können direkt verwenden
ffmpeg
, um Szenen im laufenden Betrieb zu erkennen und zu extrahieren, ohne dass Informationen zu Frames gedruckt und analysiert werden müssen:Dies
-vsync vfr
ist erforderlich, da die Bildextraktion standardmäßig nicht mit variabler Bildrate funktioniert (siehe # 1644) .quelle
More than 1000 frames duplicated
.Verarbeiten Sie Ihren Text, um Ihre Zeitstempel zu erhalten, und drucken Sie sie in einer TXT-Datei aus. Verwenden Sie den TXT in ffmpeg-Segmentierer.
Die Genauigkeit ist nicht perfekt und es gibt eine Menge Probleme, auf die Sie stoßen können, es sei denn, Sie haben die vollständige Kontrolle über den eingehenden Inhalt.
Es ist erwähnenswert, dass diese Art von Arbeit ein aktuelles Forschungsthema ist und daher möglicherweise unvollständige Ergebnisse liefert.
quelle