立体地形図を手作りしてみようかな、っと(6.5)

また寄り道。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 にすることに:

MSYS bash から…
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 にアップロードしたかったりするんだろうし:

MSYS bash から…
1 me@host: FG-GML$ ffmpeg -framerate 15 -i ls-%03d.png ikegami-honmonji-shadeanim.swf

この「標高データ + shade」、太陽の高度計算と組み合わせると楽しそうね。そうえいば鳥海山とか利尻山みたいな周りに障害となるものが少ない単独峰なんかでは、「影鳥海」とか「影利尻」なんかが比較的簡単に観察出来るわけだけれど、それをわりと簡単に模擬出来そうね。

…まぁ例によってこんなの、カシミール3Dみたいな高等なソフトウェアを持ってる人にとっては、当たり前過ぎてクソ面白くもないネタなんだろうけどね。