Amcrest UltraHD 5MP POE Bullet IP Security Camera* (Amazon Affiliate)
US: https://amzn.to/39CjeFg
*This camera is similar to the one used in the video.
FFmpeg notes (including FFmpeg install): https://www.rickmakes.com/ffmpeg-notes/
FFmpeg playlist: https://www.youtube.com/playlist?list=PLErU2HjQZ_ZOPDZ71Khzt5PX4X4j6flkg
Amcrest playlist: https://www.youtube.com/playlist?list=PLErU2HjQZ_ZNYE224qh9K0hhaaIxU-rta
Create RAM Disk (Mac only)
diskutil erasevolume HFS+ "tlramdisk" `hdiutil attach -nomount ram://409600`
A RAM disk is created to store the images. This reduces wear on the computer’s SSD or hard drive. The RAM disk size is 2048 * megabytes. 409600 is 200MB.
Create Image Download Script
nano rollingtimelapse.sh
#!/bin/bash url=http://username:password@ip_address/cgi-bin/snapshot.cgi fps=60 tl_length=5 image_count=$((fps*tl_length)) function download_image { # This loops until an image is saved as temp. This prevents the saving of empty image files. "temp" purposefully doesn't have an extension so it doesn't get picked up by ffmpeg. until [ -s "temp" ] do curl --digest -o "temp" $url done # "temp" is renamed to the current file mv "temp" $1 echo $1 } # Download image once and copy it image_count number of times to preload the image set download_image `printf "%003d.jpg" 1` for ((i=1; i<=image_count; i++)); do cp -v `printf "%003d.jpg" 1` `printf "%003d.jpg" $i` done # Continually download images in a loop #initialsize the image_number image_number=1 while : do # Reset image number when it is greater than image count if [ $image_number -gt $image_count ] then image_number=1 fi # current_file is padded with 2 zeros to help with ordering in file system current_file=`printf "%003d.jpg" $image_number` download_image $current_file; image_number=$((image_number+1)) sleep $tl_length done
Type control-o to save control-x to exit.
Make Script Executable
chmod +x rollingtimelapse.sh
View Video without Re-encoding (mjpeg)
ffmpeg -framerate 60 -f image2 -stream_loop -1 -pattern_type glob -i '*.jpg' -c:v copy -b:v 10000k -r 60 -f mjpeg pipe:1|ffplay -i pipe:0
Play video and resize on the fly
ffmpeg -framerate 60 -f image2 -stream_loop -1 -pattern_type glob -i '*.jpg' -vf crop=in_w:in_w*9/16,scale=1920:1080,fps=fps=60 -c:v h264_videotoolbox -b:v 10000k -r 60 -pix_fmt yuv420p -f flv pipe:1|ffplay -i pipe:0
Play Video without Resizing
ffmpeg -framerate 60 -f image2 -stream_loop -1 -pattern_type glob -i '*.jpg' -vf fps=fps=60 -c:v h264_videotoolbox -b:v 10000k -r 60 -pix_fmt yuv420p -f flv pipe:1|ffplay -i pipe:0
If you aren’t using an Intel Mac, you can use “libx264” in place of “h264_videotoolbox”.