You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.
Outdated egg!
This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.
If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.
animation
Utility for creating animations from a series of images
make-animator
[procedure] (make-animator #!key (magnitude 10000) (frames-per-second 4) (type png) (width 1600) (height 900)) → Two values: next-frame and finalizeCreate an animator, which consists of two values: a frame-creator and a finalizer.
Next-frame is a niladic function which returns the filename of the next frame; finalize is a monadic function taking the name of the resultant animation (e.g. "graph.avi").
- magnitude
- Roughly the number of animations one anticipates
- frames-per-second
- Frames per second
- type
- The frame type; one of e.g. "png", "jpg"
- width
- The width of the frame in pixels (#f for no scaling)
- height
- The height of the frame (#f for no scaling)
(define (make-animator
#!key
(magnitude 10000)
(frames-per-second 4)
(type "png")
(width 1600)
(height 900))
(let ((directory (create-temporary-directory))
(current-frame 0)
(digits (inexact->exact (ceiling (/ (log magnitude) (log 10))))))
(define (next-frame)
(let ((frame (make-pathname
directory
(format (format "~~~a,48d" digits) current-frame)
type)))
(inc! current-frame)
frame))
(define (finalize animation)
(let ((options
(option-string
(append
`((type unquote type) (fps unquote frames-per-second))
(if width `((w unquote width)) '())
(if height `((h unquote height)) '())))))
(run (mencoder
,(format
"mf://~a"
(make-pathname directory (format "*.~a" type)))
-mf
,options
-ovc
lavc
-o
,animation))))
(values next-frame finalize)))
Examples
In this hypothetical example, we're running a depth-first-search on a graph; outputting an animation frame every step.
(receive (next-frame finalize) (make-animator) (let ((graph (make-random-graph))) (call-for-each-frame (depth-first-search graph) (lambda (graph) (write-graph-as-png graph (next-frame)))) (finalize "graph")))
About this egg
Author
Repository
https://github.com/klutometis/animation
License
BSD
Dependencies
Versions
- 0.1
- Initial release
- 0.2
- Fix cock-invocation.
- 0.3
- Add width and height.
- 0.3.1
- Remove the dependency on setup-helper-cock.
- 0.3.2
- Remove the dependency on debug.
- 0.3.3
- Use hahn.
Colophon
Documented by hahn.