Teilen Sie ein Video mit FFMPEG durch Szenenerkennung auf

17

Ich habe diesen Thread gesehen, der fast genau das macht, was ich will, aber ich suche tatsächlich nach Aufspaltung bei der Szenenerkennung.

Große .mov-Videodateien automatisch in kleinere Dateien mit schwarzen Rahmen aufteilen (Szenenwechsel)?

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
Aronchick
quelle
Bearbeiten Sie keine neue Frage in die vorhandene, stellen Sie keine neue Frage und lesen Sie diese, um zu erfahren, wie Sie die Zeitstempel erhalten haben.
djsmiley2k - CoW

Antworten:

4

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:

ffmpeg -i foo.mp4 -vf select='gt(scene\,0.4)' -vsync vfr frame%d.png

Dies -vsync vfrist erforderlich, da die Bildextraktion standardmäßig nicht mit variabler Bildrate funktioniert (siehe # 1644) .

Delgan
quelle
Diese Methode stürzt ffmpeg für mich mit Warnung ab More than 1000 frames duplicated.
Ashleedawg
1
Wie hast du eigentlich die kleinen Videos erstellt? Mit dem obigen Befehl werden PNG-Bilder und keine kleineren MP4-Videos erstellt.
Juan Pablo Fernandez
3

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.

dstob
quelle