Saya melihat utas ini, yang hampir persis melakukan apa yang saya inginkan, tetapi saya sebenarnya mencari pemecahan pada deteksi adegan.
Sebagai contoh, katakanlah saya memiliki seorang wanita di layar mulai dari 0:01 -> 0:05, kemudian seorang pria di adegan yang berbeda dari 0:06 -> 0:09, dan seorang wanita kedua di layar dari 0:10 - > 0:14
Ini (idealnya) akan membuat tiga klip video berbeda. Saya benar-benar ingin turun ke tingkat bingkai, jika mungkin, dengan deteksi otomatis ketika adegan berubah.
** DIPERBARUI **
Ok, saya memulai dengan baik. Saya telah melakukan hal berikut menggunakan FFProbe:
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt
Yang memberi saya daftar cap waktu yang tampaknya benar! Sekarang langkah selanjutnya - bagaimana saya mengambil daftar cap waktu ini dan memasukkannya kembali ke ffmpeg untuk membaginya? Ini contoh cap waktu.
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
sumber
Jawaban:
Anda dapat langsung menggunakan
ffmpeg
untuk mendeteksi dan mengekstrak adegan dengan cepat tanpa perlu mencetak dan mengurai informasi frame:Ini
-vsync vfr
diperlukan karena ekstraksi gambar tidak berfungsi dengan variabel framerate secara default, lihat # 1644 .sumber
More than 1000 frames duplicated
.Memproses teks Anda untuk mendapatkan cap waktu dan mencetaknya dalam file .txt, gunakan .txt di ffmpeg segmenter.
Akurasi tidak akan sempurna dan ada banyak masalah yang dapat Anda temui kecuali Anda memiliki kontrol penuh atas konten yang masuk.
Perlu dicatat bahwa jenis pekerjaan ini adalah topik penelitian saat ini sehingga sekali lagi, mungkin menghasilkan hasil yang tidak sempurna.
sumber