動画の作成
PyMOLでは振動や回転の動画を簡単に作ることができます。あまりに複雑な動画を作るのは大変だと思いますが、単純な振動や回転なら簡単です。
動画用のフレームを作る
まずは「入れ物」であるフレームを作成します。
PyMOL> mset 1 x30
これで30フレームが作成されます。msetの動作は結構複雑なのですがとりあえず30フレーム作るということで 。詳しくは、
PyMOL> help mset
で確認できますが・・・よくわかりません。
振動動画を作成する
msetでフレームを作った後、
PyMOL> movie.rock(1,30,50,0,1)
で30フレームで+/-25°振動する動画が作成されます。Viewer右下の矢印をクリックすると再生されます。
なお、util.mrock()でも同じ効果が得られますが、PyMOL2では廃止するようです。
構文
movie.rock(first=1, last=-1, angle=30, phase=0, loop=1, axis='y')
- first : 最初のフレームNo
- last : 最後のフレームNo
- angle : 振動角(+/-)
- phase : スタートする周期(angle * sin(π * phase / 180))
- loop : 振動のずれが発生しない(エンドレス動画用;0または非0)
- axis : 中心軸
使用例
PyMOL> movie.rock(1,30,50,0,1,'x')
X軸を振動の中心軸として+/-50°振動させる。loopを0にすると、振動しながら少しずつ回転する。
検証
周期を90°とすればloop=0としてもずれないはずなのだが、浮動小数点の誤差で少しずつずれる。
回転動画を作成する
msetでフレームを作った後、
PyMOL> movie.roll(1,30,1)
これで30フレームで1周する動画が作成されます。もっとゆっくり回転させたい場合はmsetのフレーム数を増やして、同様にrollのフレーム数を増やします。これも同様にutil.mroll()が使えますが廃止されるようです。
構文
movie.roll(first=1, last=-1, loop=1, axis='y')
- first : 最初のフレームNo
- last : 最後のフレームNo
- loop : おそらくずれの調整(0または非0)
- axis : 中心軸
軸に沿って進む
構文
movie.zoom(first, last, step=1, loop=1, axis='z')
- first : 最初のフレームNo
- last : 最後のフレームNo
- loop : 非0なら往復する。0ならずーっと進む
- axis : 沿っていく軸
使用例
PyMOL> movie.zoom(1,30,1,1)
Z軸に沿って進んで行く。
高画質な動画を作成する
高品質な動画を作成したいとき、レイトレーシングをしながら動画を作成することができます。もちろん、1フレームごとに計算するのでかなり時間がかかりますが・・・
External GUIの[Movie]->[Render Frames]にチェックを入れます。これでフレームごとにレンダリングされます。
作成した動画を保存する
保存する
作成した動画は連番のPNGファイルとして保存されます。External GUIの[File]->[Save Movie...]で保存します。指定した名前をプレフィックスとした一連のファイルが作成されます。
アニメーションGIFにまとめる
作成したPNGファイルをアニメーションGIFにまとめます。ImageMagickを使うと簡単でした。
例えばmov0001.pngとして保存された一連のファイルがあるとしたら・・・
% convert -delay 3.3 -loop 0 mov00??.png movie.gif
でアニメーションGIFが作成されます。-delayは次の画像に切り替わるまでの時間(単位:1/100秒なので30fpsなら3.3ぐらいでしょう)、-loopはループする回数(0なら無限)になります。
こんな感じになりました。