Dump all video frames
$ ffmpeg -i input.mkv -an -qscale 1 %06d.jpg
Cat video frames in reverse order to FFmpeg as input
$ cat $(ls -t *jpg) | ffmpeg -f image2pipe -vcodec mjpeg -r 25 -i - -i backwards.wav
-vcodec libx264 -vpre slow -crf 20 -threads 0 -acodec flac output.mkv
via ffmpeg – encode video in reverse? – Stack Overflow.
The above ffmpeg command examples turned out to be very useful. Previously I had to do this manually in Avidemux.
The output of my IP camera is VGA 640×480 and I needed to slice that up into a 10×10 array of little areas (100 jpeg files) using the following:
convert input.jpg -crop 64x48 +repage +adjoin myoutputfile_%02d.jpg
Motion detect reveals a lot of false positives which must be filtered out manually. In order to automate this I compare time n to time n+1 in only a couple of the 100 little jpegs separated in the above command. So far I’m using this:
compare -metric MAE time_n_number.jpg time_n+1_number.jpg null: 2>&1
A changed portion of the jpeg will generate a high number which can be compared to a threshold in a script allowing me to eliminate most all false positive motion detects.
More detailed explanation for the Image compare commands in the ImageMagick package can be found here:
ImageMagick v6 Examples –Image Comparing
Therefore my entire process consists of separating the video into jpegs, finding changes in areas where there shouldn’t be changes and if not reassembling the jpegs back into a video file again all done automatically via bash scripting.
There probably are more elegant solutions but this works for now.