丟柴濤阿~使用 ffmpeg 對監視器影片做場景動作偵測

最近家裏公寓頂樓的鐵門被偷,需要在沒有提供動作偵測的監視器影片裡面找到犯人,快轉最多 32 倍,看一天需要花 86400 / 32 / 60 = 45 分鐘,專心的坐在螢幕前面,實在很沒效率…,說不定一晃神犯人就跑了,我也做不來阿。

找半天支援物件偵測(object detection) 的 mac 軟體,都是要在軟體裡面錄完影,才會有分析結果的,例如 sighthound video ,而 windows 好像有 ispy 只是沒有電腦可以用不方便就沒有試了。

是有看到有人說用影像編輯軟體可以自動找到切割點,但是 400G 影片是要轉到什麼時候阿 XD,話說 final cut pro 好像可以?又能試用。

在網路上找半天這種資源,都是論文比較多,沒什麼可以實際用的軟體,如果有可能也是一些 library ,難不成真的要自己寫…?

最後找到一個折衷方案,用 ffmpeg 來對某些關鍵點截圖,然後加上時間,加快搜尋有哪些時間點有人經過,

還沒實際倒影片進去跑,所以不知道有沒有用也不知道要跑多久,只是對颱風天花一個下午的研究做個小結,

用了兩個 video filter (-vf)

一個是 drawtext 用 %{pts : hms} Presentation time stamp,幫每個 frame 加上時間,比較方便看結果,

再用 select filter select=”eq(pict_type,I)” filter 挑出 pict_type 屬於 I 的 keyframe?文件也沒寫這是啥,只是 stackoverflow 都這樣教-_-

最後在輸出成圖片檔用命名成 keyframe%03d.png,完整指令如下

# select pic_type=I
$ ffmpeg -i record.mp4 \
-vf "drawtext=fontfile=/Users/user/Library/Fonts/SourceCodePro-Bold.otf: text='%{n} %{pts \\: hms}':fontsize=20: fontcolor=white@0.8: x=7: y=10,select='eq(pict_type\,I)'" \
-vsync 0 -an keyframes%03d.png

只是試一試這個結果會有很多空的場景,不夠好,換個 filter 試試看 select=’gt(scene ,0.08)’

# select scene > 0.08
$ ffmpeg -i record.mp4 -vf "drawtext=fontfile=/Users/user/Library/Fonts/SourceCodePro-Bold.otf: text='%{n} %{pts \\: hms}':fontsize=20: fontcolor=white@0.8: x=7: y=10,select='gt(scene\,0.08)'" -vsync 0 -an keyframes%03d.png

scene 文件寫得比較清楚,還有一個參數能控制,可以過濾當兩個畫面相似度超過多少就過濾掉,值越小出來的圖片結果會越多。

以此 youtube 監視器影片為範例,抓出來的結果,這是範例,他不是小偷他不是小偷喔

Screen Shot 2015-07-10 at 5.56.37 PM

keyframes009

加上一個 tile filter 可以做馬賽克圖

ffmpeg -i record.mp4 -vf "drawtext=fontfile=/Users/user/Library/Fonts/SourceCodePro-Bold.otf: text='%{pts \\: hms}':fontsize=40: fontcolor=white@0.8: x=7: y=10,select='gt(scene\,0.06)',scale=160:120,tile=5x4" -vsync 0 -an keyframe.png

keyframe

這種圖片有沒有很眼熟?某些在網路下載的影片也都會提供這種縮圖…喔,印象中 Windwos 的 MPC 也有內建這功能。

補充:

由於 drawtext 會用到 libfreetype 所以在編的時候要記得加,如果是 mac 用 homebrew 裝的話可以這樣下:

$ brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus --with-x265

參考資料
1. http://video.stackexchange.com/questions/14928/how-to-burn-timestamp-onto-video
2. https://trac.ffmpeg.org/wiki/CompilationGuide/MacOSX mac 安裝 ffpmeg
3. https://ffmpeg.org/pipermail/ffmpeg-user/2012-February/004733.html ffmpeg 要裝 freetype
4. https://support.apple.com/en-us/HT201722 mac 字體位置

One comment on “丟柴濤阿~使用 ffmpeg 對監視器影片做場景動作偵測

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *