Difference between revisions of "Creating Movies"
Line 84: | Line 84: | ||
</pre> | </pre> | ||
− | Many options and codecs are available, | + | Many options and codecs are available, the default settings often create images that are too grainy due to the high image compression. Some testing by Mario Valle at CSCS gave [http://personal.cscs.ch/~mvalle/mencoder/experiment.html optimal mencoder options] for a movie of atomistic simulations (the following line should be added to the command line mentioned above): |
<pre> | <pre> | ||
− | + | lavcopts="vbitrate=2160000:mbd=2:keyint=132:vqblur=1.0:cmp=2:subcmp=2:dia=2:mv0:last_pred=3" | |
</pre> | </pre> |
Revision as of 07:58, 14 April 2008
- A list of Jmol / JSmol Tutorials written by users.
- Using the mouse (English · Español · Français · Japanese).
- Scripting quickstart: rendering options · selecting atoms.
- How to create surfaces and isosurfaces, including cavities, pockets and tunnels.
- Displaying shapes, polyhedra, orbitals, dipoles, distances, forces and vibrations.
- Creating movies.
- Customizing Jmol: macros · menus.
- Web pages without writing code by using the Jmol "Export to Web" function.
An animation is just a sequence of images, so all one needs is Jmol to create a batch file of images. There is currently no menu option to do this, but a small bit of scripting can do the trick. It is possible to get the movie output from either one frame at several angles or from a series of frames.
Output Loop Script
The main part of the script is given here: based on a mail from Bob Hanson on the mailing list. If you want to rotate a single molecule, you need to uncomment the respective 'rotate' commands. If you want to loop over the timeframes in your coordinate file, you only need to change the 'nFrames' variable to the amount of frames you are currently using (this is given in the title of the main Jmol window). You might also want to change the width and height parameters to create a bigger or smaller animation.
name = "./frame0000.jpg"; nFrames = 125; nDegrees = 1; thisFrame = 0; width = 640; height = 480; set zoomLarge false; message loop; thisFrame = thisFrame + 1; fileName = name.replace("0000","" + ("0000" + thisFrame)[-4][0]); #rotate x @nDegrees; # use these options if you want to rotate the molecule #rotate y @nDegrees; #rotate z @nDegrees; frame next; # only use this if you have a multiframe file. refresh; write image @width @height @fileName; if (thisFrame < nFrames);goto loop;endif; background black;
Save this text in a file, for example 'movieloop.jmol'.
Viewstate
Now you still need to create a viewstate. To do this, load the system coordinates you are interested in, rotate and change background colors until the picture looks as you want it. This can be saved into a file with the command:
write state "moviestate.jmol"
A state file look something like this (only some of the important parts are shown):
... load "CoCr_125frames.XYZ"; # This part is essential! ... cameraDepth = 3.0; center {6.424099 3.137966 4.133584}; moveto /* time, axisAngle */ 0.0 { -704 -672 -228 173.73} /* zoom, translation */ 62.1 2 0.0 0.06 /* center, rotationRadius */ {6.424099 3.137966 4.133584} 9.94055;; slab 100;depth 0; ...
Creating a playable movie
To create the animation, make a file with first the viewstate and then the loop, for example by:
cat moviestate.jmol movieloop.jmol > movie.jmol jmol movie.jmol
Jmol will start, and show you the animation, while it is writing the output files.
Encoding to a movie
The most straightforward way to encode to mpeg2 is "convert". This will create huge files and the needed mpeg2encode might not always be installed.
convert *.jpg movie.gif convert *.jpg movie.mpg
Alternatively, encode to smaller mpeg4 files with "mencoder", which comes along with mplayer.
mencoder "mf://*.jpg" -o movie.mpg -ovc lavc -fps 8
Many options and codecs are available, the default settings often create images that are too grainy due to the high image compression. Some testing by Mario Valle at CSCS gave optimal mencoder options for a movie of atomistic simulations (the following line should be added to the command line mentioned above):
lavcopts="vbitrate=2160000:mbd=2:keyint=132:vqblur=1.0:cmp=2:subcmp=2:dia=2:mv0:last_pred=3"