Innovative Web Design and Application Development News

June 17th, 2011
June 17th, 2011

Automatic Timelapse Video

Building automatic daily time lapse videos

In part to see how it would work, and in part to evaluate the possibilities for some specific applications I have completed a project to create a daily time lapse video that is completely automated using the Axis M1104 web cam, ffmpeg video transcoder, and simple shell scripts.
  • The process, in a nutshell is simple:
  • Take a still image jpeg capture from the cam every minute
  • Stitch these images together into a HD video at the end of the day
  • Pad this combined video with bumpers (intro and exit)
  • Include a soundtrack that changes for ever day of the week
The results have been encouraging so far - Even after leaving the system for 2 days to travel to Victoria.

Completed videos are manually posted to YouTube each day (a process Im looking to automate as well) To view a sampling of these videos visit the eCoustic Media YouTube Channel. The latest video is included below:

For those with a more technical interest the code to complete this process is included below:

Capture Command (with access credentials removed:

wget --user=xxxx --password=xxxx -O /data/www/images/cam/minute/wc`date +%Y%m%d%H%M%S`.jpg ""

The above is executed every minute from 0400h until 2300h triggered by a cron job.

Main Process Script
This script runs at 2302h (just after the last capture and creates the actual video. It is split into several scripts so there is the possibility to execute a preview during the day to check on progress (for the impatient coder)

# Process daily timelapse


#* Process Actual Frames
for filename in $(ls -tr /data/www/images/cam/minute/*.*g | sed s/ /__/g)
  if [ $count -lt 10 ]; then
  elif [ $count -lt 100 ]; then
  elif [ $count -lt 1000 ]; then
  filename="$(echo $filename | sed s/__/ /g)"
  echo "copying "$filename" to $newname"
  cp "$filename" "$newname"
  count=$(( $count + 1 ))

#* Process Video

#* Cleanup
rm -Rf /data/www/images/cam/minute/frames/*

#* Rolling Daily Frame Backup
rm -Rf /data/www/images/cam/minute/yesterday/*

mv /data/www/images/cam/minute/*.*g /data/www/images/cam/minute/yesterday/

exit 0

# Process Timelapse Video

#* Process Frames with no audio
nice -n 19 /usr/local/bin/ffmpeg -r 24 -i /data/www/images/cam/minute/frames/%04d.jpg -b 3700000 -aspect 16:9 -s 1280x720 -f mpeg2video -y /data/www/images/cam/minute/frames/frames.mpg

#* Add Bumpers
cat /data/www/images/cam/minute/leadin/leadin.mpg /data/www/images/cam/minute/frames/frames.mpg /data/www/images/cam/minute/leadin/leadout.mpg > /data/www/images/cam/minute/frames/full.mpg

#* Render final with soundtrack
nice -n 19 /usr/local/bin/ffmpeg -r 24 -i /data/www/images/cam/minute/frames/full.mpg -i /data/www/images/cam/music/0`date +%u`.wav -vcodec libx264 -vpre slow -vpre ipod640 -b 2048000 -bt 921600 -aspect 16:9 -threads 0 -f ipod -y /data/www/images/cam/timelapse`date +%Y%m%d`.mp4

The encoding first renders mpeg2 video to facilitate the concatenation of the bumpers. These were created previously in Adobe Premiere but encoded with the exact same settings using ffmpeg to ensure that the streams were of the exact same format.

Share this:
No Comments
You must login or register to post comments Login/Signup
RSS feed Feed Description
Subscribe to the complete News RSS news feedAll News RSS feed Complete RSS feed
Subscribe to the News RSS news feed for this category onlyTechnobloggle RSS feed for: Technobloggle
A Rich Site Summary (RSS) feed is an xml data file that provides a summary of the information contained here. It is not designed to be viewed in your browser, but instead by rss reader software. If you do not know what this means - you can safely ignore it, as it is provided for advanced users with rss reader software only.
Copyright © 1992-2024
XDe Modular CMS: