Membagi Video Menggunakan FFMPEG melalui Deteksi Pemandangan


17

Saya melihat utas ini, yang hampir persis melakukan apa yang saya inginkan, tetapi saya sebenarnya mencari pemecahan pada deteksi adegan.

Secara otomatis membagi file video .mov besar menjadi file yang lebih kecil dengan bingkai hitam (perubahan 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

Jangan mengedit pertanyaan baru menjadi yang sudah ada, tanyakan pertanyaan baru, dan merujuk kembali ke ini untuk bagaimana Anda mendapatkan cap waktu.
djsmiley2k dalam kegelapan

Jawaban:


4

Anda dapat langsung menggunakan ffmpeguntuk mendeteksi dan mengekstrak adegan dengan cepat tanpa perlu mencetak dan mengurai informasi frame:

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

Ini -vsync vfrdiperlukan karena ekstraksi gambar tidak berfungsi dengan variabel framerate secara default, lihat # 1644 .


Metode ini crash ffmpeg bagi saya dengan peringatan More than 1000 frames duplicated.
ashleedawg

1
Bagaimana Anda benar-benar membuat video kecil? Perintah di atas membuat gambar png dan bukan video mp4 yang lebih kecil.
Juan Pablo Fernandez

3

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.