ffmpeg menghapus bagian tanpa gerakan

15

Saya memiliki kamera keamanan IP (192.168.0.8) yang dapat menyiarkan konten rtsp melalui jaringan.

Saya dapat menyimpan konten (RAW) itu tanpa perubahan menggunakan perintah ffmpeg berikutnya dari komputer saya:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

Saya juga dapat mengubah ukurannya dengan cepat:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

Tetapi bagaimana cara menyimpan hanya video yang berisi bagian deteksi gerak saja?

Saya mencoba menyelesaikannya menggunakan filter perubahan adegan ffmpeg , tetapi tidak berhasil.

Tujuan saya - untuk memiliki solusi pemantauan video umum, yang mendeteksi ketika seseorang bergerak di dekat kamera dan menyimpannya ke dalam file video. Saya mengerti bahwa mungkin tidak mungkin melakukannya dengan cepat dari aliran, jadi tidak masalah bagi saya untuk menyimpan file besar terlebih dahulu, kemudian memprosesnya dengan perintah ffmpeg lain dan menghasilkan file video baru yang hanya berisi bagian-bagian yang terdeteksi gerakan. Jika Anda bisa memberi saya nasihat apa yang harus saya teliti lebih lanjut, saya akan sangat berterima kasih.

Aliran kamera saya ditransmisikan tanpa suara. Jadi, saya dapat menghasilkan set gambar dari video asli, lalu memilih gambar yang tepat dan kemudian menyimpan video baru dari gambar.

rfedorov
sumber
Apakah Anda ingin menerapkan sistem ini atau mencari produk yang siap digunakan?
Woeitg
@ WOEITG Saya hanya butuh solusi kerja gratis untuk Ubuntu 15.04+
rfedorov
Untuk Windows, ada perangkat lunak bernama ispy, yang dapat Anda atur untuk merekam pada deteksi gerakan. Karena Anda meminta solusi Linux, zoneminder.com haruslah produk yang serupa. Sayangnya saya tidak punya jawaban langsung untuk pertanyaan Anda, tetapi +1 karena saya juga ingin jawaban
MyNameWouldGoHere

Jawaban:

7

Apa yang saya lakukan adalah melakukan persis seperti yang Anda katakan, dan menyimpan file besar dari aliran, kemudian menggunakan select filter FFMPEG dengan sceneekspresi, yang membandingkan kesamaan frame berturut-turut: select=gt(scene\,0.003)misalnya. Semakin tinggi angkanya, semakin banyak perubahan di antara frame diabaikan, dalam pengujian cepat Anda mungkin harus serendah 0,00001-0,00005 tergantung pada jenis rekaman yang Anda hadapi.

Gabungkan dengan setpts filter , yang mengubah "waktu mulai" dari frame video, dan Anda akan berakhir dengan sesuatu seperti (untuk video 25fps):

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

Pikiran Anda, Anda tidak akan dapat menggunakan -vcodec copysaat Anda menggunakan filter video.

Shinmai
sumber