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
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:
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.