CHDK Wiki
Register
Advertisement
Written for/on: Powershot S5 IS
Also works on: SD800IS, A590IS, A560 (but can't work with display switched off, this is major disadvantage - causing battery drain long ago before sun actually gone below the horisont no matter which capacity), IXUS 40 and IXUS 50 (display off works, first turn off display then hit alt then start shooting).
Doesnt works on:

This script attempts is meant to shoot time-lapse videos of sunsets: starting from full daylight and ending in full night, always adapting exposure for a correct shot.

Up to a certain point (when there is enough light to be directly measured) the script exposes automatically, then starts guessing the exposure, increasing first exposure time (up to a certain limit) then ISO (again, up to a certain limit).

Suggested camera settings: Camera mode: manual White balance: Sun (other settings, if desired but not auto) Image size: a small image size (S) is suggested, in order to allow more shots Flash: off Focus: manual, set to infinity Aperture: maximum

Note: all the parameters here are expressed in APEX*96 units, with equivalence.

First, you will have to decide the delay between one shot and the other (how many seconds between each shot) Suggested values: 5 or 10 seconds. Longer might also be ok, but the resulting video will be shorter.

Then, you will have to decide what will be the final exposure parameters. These will depend strongly on the type of scene you will be shooting.

Examples of suggested values: Landscape with strong lights (city), illuminated sky 5" (Tv -224) ISO 1250 (Sv 767). Stars will be barely visible Landscape without lights (countryside), dark sky 15" (Tv -384) ISO 2500 (Sv 864) Stars will be well visible

These parameters are called "Limit Tv" and "Limit Sv" in the script.

Finally, you have to decide the "Default Sv", (the ISO settings to start with). I suggest ISO 100 (Sv 419)

Other values ("Guess mode limit" and "Slope in guess mode") are better left to their default values

You can now run the script.

For debugging purposes, the program logs quite some information in the PR_SCREEN.TXT file (in CHDK/SCRIPTS). If you have problems with the script, save the PR_SCREEN.TXT so that problems are better pinpointed.

This is the script:

Script Code (save as "Sunset4.bas" to your /CHDK/SCRIPTS/ folder)

@title Sunset4
  rem Script to shoot time-lapse videos of sunsets
  rem v. 4, Fbonomi apr 30th 2008
  rem Released under GPL
  @param a Delay (sec)
  @default a 10
  @param b Limit Tv 
  @default b -414
  rem (-414=20 sec; -384=15 sec; -320=10 sec; -224=5 sec.)
  @param c Default Sv
  @default c 480
  rem (480=160)
  @param d Limit Sv 
  @default d 776
  rem (776=1250 ISO; 960=5000)
  @param e Guess mode limit
  @default e -200
  @param f Slope in guess mode
  @default f 5
  print_screen 1
  print "Sunset Time Lapse"
  rem initialize guess mode value
  x=e
  rem get start Tv
  get_tv96 T
  rem picture counter 
  p=1
  :loop
  rem measure luminance and aperture
  press "shoot_half"
  sleep 500
  release "shoot_half"
  get_bv96 B
  get_av96 A
  rem release "shoot_half"
  print "Measured: ",B ,A
  rem resulting Tv would be:
  T=B-A
  T=T+c
  print "Calculated T: ", T
  rem check Tv Values
  if T>e then
   rem normal mode, shoot with calculated Tv and default Sc
   X=T
   Y=c
   print "Mode: Standard"
  else
   rem Guess mode, every shot will be 5/96th steps longer
   x=x-f
   if  x>b then 
    rem we are in dark, but exposure is not too long
    rem normal mode, shoot with guessed Tv and default Sc
    X=x
    Y=c
    print "Mode: Guess"
   else
    rem we are in very dark area, we want to avoid too long exposures
    rem shoot with maximum allowed time (b) and
    rem adjust Sv accordingly
    X=b
    Y=c+b-x  
    rem BUT check we don't go in too high ISO!
    if Y>d then
     Y=d
    endif  
    print "Mode: Guess with High ISO" 
   endif 
  endif
  rem we can now shoot
  sleep 100
  set_sv96 Y
  set_tv96_direct X
  sleep 100
  shoot
  sleep 100
  print "SHOOT ",p,X,Y
  p=p+1
  sleep a*1000
  goto "loop"

12/09/2012 -- Updated by doghousedean to allow turning off of LCD back light.

Script Code (save as "Sunset5.bas" to your /CHDK/SCRIPTS/ folder)

 @title Sunset5
 rem Script to shoot time-lapse videos of sunsets
 rem v. 4.1, Fbonomi apr 30th 2008
 rem v. 5.0, Update by doghousedean 12/09/2012 - added turning off of LCD backlight with options
 rem Released under GPL
 @param g Backlight Enabled (0=off 1=on)
 @default g 0
 @param a Delay (sec)
 @default a 10
 @param b Limit Tv 
 @default b -414
 rem (-414=20 sec; -384=15 sec; -320=10 sec; -224=5 sec.)
 @param c Default Sv
 @default c 480
 rem (480=160)
 @param d Limit Sv 
 @default d 776
 rem (776=1250 ISO; 960=5000)
 @param e Guess mode limit
 @default e -200
 @param f Slope in guess mode
 @default f 5
 print_screen 1
 print "Sunset Time Lapse"
 rem test for backlight enabled/disabled
 if g=0 then
 print "Turning Off backlight in 3 seconds"
 sleep 3000
 set_backlight 0
 else
 print "Leaving backlight on"
 endif
 rem initialize guess mode value
 x=e
 rem get start Tv
 get_tv96 T
 rem picture counter 
 p=1
 :loop
 set_backlight g
 rem measure luminance and aperture
 press "shoot_half"
 sleep 500
 release "shoot_half"
 get_bv96 B
 get_av96 A
 rem release "shoot_half"
 print "Measured: ",B ,A
 rem resulting Tv would be:
 T=B-A
 T=T+c
 print "Calculated T: ", T
 rem check Tv Values
 if T>e then
  rem normal mode, shoot with calculated Tv and default Sc
  X=T
  Y=c
  print "Mode: Standard"
 else
  rem Guess mode, every shot will be 5/96th steps longer
  x=x-f
  if  x>b then 
   rem we are in dark, but exposure is not too long
   rem normal mode, shoot with guessed Tv and default Sc
   X=x
   Y=c
   print "Mode: Guess"
  else
   rem we are in very dark area, we want to avoid too long exposures
   rem shoot with maximum allowed time (b) and
   rem adjust Sv accordingly
   X=b
   Y=c+b-x  
   rem BUT check we don't go in too high ISO!
   if Y>d then
    Y=d
   endif  
   print "Mode: Guess with High ISO" 
  endif 
 endif
 rem we can now shoot
 sleep 100
 set_sv96 Y
 set_tv96_direct X
 sleep 100
 shoot
 sleep 100
 print "SHOOT ",p,X,Y
 p=p+1
 if g=0 then
 print "Turning Off backlight in 1 seconds"
 sleep 1000
 set_backlight 0
 else
 print "Leaving backlight on"
 endif
 sleep (a-1)*1000
 goto "loop"
Advertisement