Sahne Algılama ile FFMPEG Kullanarak Bir Videoyu Bölme


17

Neredeyse tam olarak istediğimi yapan bu konuyu gördüm, ama aslında sahne tespiti için ayrılmayı arıyorum.

Büyük .mov video dosyalarını siyah karelerdeki daha küçük dosyalara otomatik olarak böler (sahne değişiklikleri)?

Örneğin, 0:01 -> 0:05 arasında ekranda bir kadınım var, sonra 0:06 -> 0:09 arasında farklı bir sahnede bir adamım var ve ekranda 0:10 - dan ikinci bir kadınım > 0:14

Bu (ideal olarak) üç farklı video klip oluşturacaktır. Sahnelerin değiştiği zaman için otomatik algılama ile mümkünse, çerçeve seviyesine gerçekten inmesini istiyorum.

** GÜNCELLENMİŞ **

Tamam, harika bir başlangıç ​​yapıyorum. FFProbe kullanarak aşağıdakileri yaptım:

ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt

Bu bana tam olarak doğru görünen zaman damgalarının bir listesini verir! Şimdi bir sonraki adım - bu zaman damgaları listesini nasıl alabilirim ve bölmek için bunları ffmpeg'e nasıl geri girebilirim? İşte zaman damgalarına bir örnek.

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

Mevcut bir soruya yeni bir soru düzenlemeyin, yeni bir soru sorun ve zaman damgasını nasıl aldığınız konusunda bu konuya tekrar bakın.
karanlıkta djsmiley2k

Yanıtlar:


4

ffmpegÇerçeve bilgilerini yazdırmaya ve ayrıştırmaya gerek kalmadan sahneleri anında algılamak ve ayıklamak için doğrudan kullanabilirsiniz :

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

-vsync vfrGörüntüleri çıkarma varsayılan olarak değişken kare hızına sahip çalışma değil çünkü gerekli mi göreceğiz # 1644 .


Bu yöntem benim için uyarı ile ffmpeg çöküyor More than 1000 frames duplicated.
ashleedawg

1
Küçük videoları gerçekten nasıl oluşturdunuz? Yukarıdaki komut daha küçük mp4 videoları değil png resimleri oluşturur.
Juan Pablo Fernandez

3

Zaman damgalarınızı almak ve bunları bir .txt dosyasına yazdırmak için metninizi işleyin, ffmpeg segmenter içindeki .txt dosyasını kullanın.

Doğruluk mükemmel olmaz ve gelen içerik üzerinde tam kontrole sahip olmadığınız sürece karşılaşabileceğiniz birçok sorun vardır.

Bu tür bir çalışmanın güncel bir araştırma konusu olduğunu belirtmek gerekir, bu yüzden yine kusurlu sonuçlar üretebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.