Create GIFs from alerts & clips; Send Pushover notifications with GIF attachments

The 'best' delay time is certainly gong to be specific to your camera recording settings, and your system.

The hard-coded 2 * (pre-trigger record time) value is purely arbitrary. It seemed to work in my development testing for my camera settings, and was faster than my initial experiments using 1.1 * (alert duration time).

I've just experimented with using an even shorter delay of 5 seconds -BvrDelaMsec 5000) and results this time were identical to the default delay for my setup (2 * 5 seconds pre-trigger record time).

The reason a delay is SOMETIMES needed is because when I asynchronously execute the HTTP commands to extract JPGs from the BVR associated with a just triggered new alert (examples shown below for a 10-frame GIF), sometimes the requested times are not yet available. When this happens, the command does not fail, but instead it seems to always return a JPG from the beginning of the BVR clip. I've found no obvious way to detect when this has happened so that I can re-request the 'bad' targeted JPG image. The resulting GIF will look 'jumpy' because some of the frames are from the beginning of the clip.

Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3197430&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3198542&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3199654&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3200766&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3201878&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3202990&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3204102&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3205214&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3206326&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3207438&decode=-1&cache=1&h=320

I've just emailed Ken to once again request an HTTP command that can extract JPG images from the still-buffered video (before it’s written to the BVR file).

Ken previously said this was doable. Notably, Blue Iris already grabs JPGs from the buffer for AI processing (and, saves them to the DAT file, if configured). All of this apparently happens before the the alert is triggered, and the buffer is written to the BVR file. I'm pretty sure this is why using the DAT file always works.

Perhaps variations in the AI processing time are why the BVR-derived JPGs are sometime all available, and other times are not. Of course, this will not apply if the camera is not configured to use AI detection.
 
Last edited:
The 'best' delay time is certainly gong to be specific to your camera recording settings, and your system.

The hard-coded 2 * (pre-trigger record time) value is purely arbitrary. It seemed to work in my development testing for my camera settings, and was faster than my initial experiments using 1.1 * (alert duration time).

I've just experimented with using an even shorter delay of 5 seconds -BvrDelaMsec 5000) and results this time were identical to the default delay for my setup (2 * 5 seconds pre-trigger record time).

The reason a delay is SOMETIMES needed is because when I asynchronously execute the HTTP commands to extract JPGs from the BVR associated with a just triggered new alert (examples shown below for a 10-frame GIF), sometimes the requested times are not yet available. When this happens, the command does not fail, but instead it seems to always return a JPG from the beginning of the BVR clip. I've found no obvious way to detect when this has happened so that I can re-request the 'bad' targeted JPG image. The resulting GIF will look 'jumpy' because some of the frames are from the beginning of the clip.

Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3197430&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3198542&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3199654&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3200766&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3201878&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3202990&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3204102&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3205214&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3206326&decode=-1&cache=1&h=320
Initiated request for 192.168.1.3:8600/file/clips/@183592405.bvr?time=3207438&decode=-1&cache=1&h=320

I've just emailed Ken to once again request an HTTP command that can extract JPG images from the still-buffered video (before it’s written to the BVR file).

Ken previously said this was doable. Notably, Blue Iris already grabs JPGs from the buffer for AI processing (and, saves them to the DAT file, if configured). All of this apparently happens before the the alert is triggered, and the buffer is written to the BVR file. I'm pretty sure this is why using the DAT file always works.

Perhaps variations in the AI processing time are why the BVR-derived JPGs are sometime all available, and other times are not. Of course, this will not apply if the camera is not configured to use AI detection.
Yes, I have been testing with .bvr (clip only, with AI .DAT files turned off entirely), and have definitely seen many of the jumpy GIF clips, where at least one frame comes from the beginning of the .bvr clip (which can be up to nearly an hour prior on my system, so quite noticeable).
My total Gif creation times are still typically ~22-23 seconds, with the vast majority (~20 seconds) being in the "other" category from the full performance stats.
I think until we hear that Ken has implemented the provision for pulling JPEGs directly from the raw stream, I will set aside this testing for the time being, unless there is anything specific I can provide that would be of any use to you. At least I have the basics setup now and can return again quickly if there are new developments. Thanks again.
 
  • Like
Reactions: jaydeel