また寄り道。shadeでアニメーションしたら楽しそうだなと思ってさ。
まず連続する静止画を作る:
1 # -*- coding: utf-8 -*-
2 import numpy as np
3 import converted_loader
4
5
6 X, Y, elevs = converted_loader.load_range(
7 35.575590, 139.702384,
8 35.582475, 139.709047)
9
10 elevs[np.isnan(elevs)] = 0.
11
12 #
13 import matplotlib
14 import matplotlib.cm as cm
15 import matplotlib.pyplot as plt
16 from matplotlib.colors import LightSource
17
18 elevs = np.flipud(elevs)
19
20 azdegs = list(range(0, 180, 45)) + list(range(180, 0, -45))
21 altdegs = list(range(0, 180, 15)) + list(range(180, 0, -15))
22 num = 1
23 for azdeg in azdegs:
24 for altdeg in altdegs:
25 fig, ax = plt.subplots()
26 ls = LightSource(azdeg=azdeg, altdeg=altdeg)
27 rgb = ls.shade(elevs, cm.rainbow)
28 ax.imshow(rgb)
29 ax.set_xticks([])
30 ax.set_yticks([])
31
32 plt.savefig("ls-%03d.png" % (num), bbox_inches='tight')
33 plt.close()
34 num += 1
35 #
converted_loader など、(1)~(6)を踏まえてるので、同じことをして遊んでみたい人は順に読んでくれぃ。
bbox_inches=’tight’、plt.close() しないとどうなるかは、自身でやってみるといいと思う。どっちも割と matplotlib 使い始めると初期にハマるとこで、今ワタシがやってるようなラフなものでない「ちゃんとしたもの」を作るには、ここいらがちゃんと身についてないといけない。ワタシの今の目的ではここはどうでもいいので、いい加減にやってる。
さて。この出来上がった静止画たちを動画にしたいわけなんだけど、アニメーションGIF だとファイルサイズがデカくなりすぎるのね。なので、ffmpeg で mp4 にすることに:
1 me@host: FG-GML$ ffmpeg -framerate 15 -i ls-%03d.png -c:v libx264 ikegami-honmonji-shadeanim.mp4
あ、名前からバレちゃうか。これ、池上本門寺です:
ところで、静止画から動画にするときの、「ファイル名は清く正しく連番でねばならぬ」というダサい仕様はずっとイヤでイヤで仕方なかったんだけれど、wiki:Create a video slideshow from imagesに
1 you@dokoka: ~$ ffmpeg -framerate 1 -pattern_type glob -i '*.jpg' -c:v libx264 out.mp4
とすることが出来ることを知り、喜び勇んでやってみたが…。アタシの手持ちの ffmpeg ではダメ。うーん、いつやっても ffmpeg ってこんなんばっかなのよ。全然枯れないのね、インターフェイスが。
なお、当然のことかもしれんですが、flash video にすることも出来ます。というか世間的にはこればっかなのかもな、youtube にアップロードしたかったりするんだろうし:
1 me@host: FG-GML$ ffmpeg -framerate 15 -i ls-%03d.png ikegami-honmonji-shadeanim.swf
このネタの内容が flash ビデオを作るなので swf はそのまま維持するけれども「flash はお亡くなりになる」ために、たぶん置いた swf を鑑賞できる人はかなり限られるようになるだろう。ただビデオの内容は mp4 版と全く同一、無理にのぞき込もうとしなくてもよろしい。
この「標高データ + shade」、太陽の高度計算と組み合わせると楽しそうね。そうえいば鳥海山とか利尻山みたいな周りに障害となるものが少ない単独峰なんかでは、「影鳥海」とか「影利尻」なんかが比較的簡単に観察出来るわけだけれど、それをわりと簡単に模擬出来そうね。
…まぁ例によってこんなの、カシミール3Dみたいな高等なソフトウェアを持ってる人にとっては、当たり前過ぎてクソ面白くもないネタなんだろうけどね。