
Pythonでの地球動画作成
Pythonでの地球動画作成
Pythonを利用して地球回転動画を作成してみました。matplotlibで各フレームの画像を作成し、ffmpegで1分弱のMP4フォーマットに変換しています。ffmpegについては、pipではなく個別のインストールが必要となります。
サンプルソース
#------------------------------------------------------------------------------
# FuncAnimationで地球動画のアニメーション作成
#------------------------------------------------------------------------------
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import datetime
import os
import shutil
import numpy as np
from mpl_toolkits.basemap import Basemap
#------------------------------------------------------------------------------
#単画像作成
#------------------------------------------------------------------------------
def animeCalc(frame_no):
if frame_no != 0:
plt.cla()
"""
llcrnrlon 所望の地図領域の左下隅の経度(度)。
llcrnrlat 所望の地図領域の左下隅の緯度(度)。
urcrnrlon 所望のマップ領域(度)の右上隅の経度。
urcrnrlat 所望のマップ領域の右上角の緯度(度)
緯度:北極:90,南極:-90
経度:グリニッジ:0,西マイナス、東プラス プラスマイナス180
"""
crnrlon=frame_no%360
if crnrlon == 0:
print(str(frame_no) + ":" + str(crnrlon))
#==================================================
# 描画設定
#==================================================
#画像選択
map = Basemap(projection='ortho'
,lon_0=-crnrlon
,lat_0=40
,resolution='l')
#グリッド設定
map.drawmeridians(np.arange(-360, 360, 10))
map.drawparallels(np.arange(-90, 90, 10))
#カラー設定
map.drawcountries(color='lightblue',linewidth=0.2)
#map.fillcontinents(color='darkgreen',lake_color='darkgreen')
map.fillcontinents(color='navy',lake_color='navy')
map.drawmapboundary(fill_color='royalblue')
#------------------------------------------------------------------------------
#動画作成
#------------------------------------------------------------------------------
def animeView():
#--------------------------------
#開始メッセージ
#--------------------------------
print("動画作成開始")
dt_now = datetime.datetime.now()
print(dt_now)
#グラフを表示する領域を,figオブジェクトとして作成.
fig = plt.figure(figsize=(16, 9), dpi=256, facecolor='lightblue')
fig.patch.set_facecolor('white')
#プロット設定
"""
plt.subplots_adjust(left=0.0,
bottom=0.0,
right=1.0,
top=1.0,
wspace=0.5,
hspace=0.5)
"""
#アニメーション作成
ani = FuncAnimation(fig, animeCalc, interval=20,frames=2500)
#--------------------------------
#ファイル名作成
#--------------------------------
fileMainNm = "anime"
fileMainNm += "_"
fileMainNm += str(dt_now.strftime('%Y%m%d%H%M%S'));
#ファイルパス作成
filePath = outDir + "/" + fileMainNm+".mp4"
#mp4ファイル作成
ani.save(filePath , writer="ffmpeg" , dpi=256 )
#--------------------------------
#終了メッセージ
#--------------------------------
print("動画作成終了")
dt_now = datetime.datetime.now()
print(dt_now)
#------------------------------------------------------------------------------
#メイン関数
#------------------------------------------------------------------------------
def main():
#--------------------------------
#開始メッセージ
#--------------------------------
print("描画開始")
dt_now = datetime.datetime.now()
print(dt_now)
#--------------------------------
#ファイル名作成
#--------------------------------
fileMainNm = "anime"
fileMainNm += "_"
fileMainNm += str(dt_now.strftime('%Y%m%d%H%M%S'));
#--------------------------------
#ディレクトリ作成
#--------------------------------
new_path = "./out/" +fileMainNm
if not os.path.exists(new_path):
os.mkdir(new_path)
global outDir
outDir=new_path
print(outDir)
#--------------------------------
#実行Phytonファイルのコピー
#--------------------------------
print(os.path.basename(__file__))
shutil.copyfile(os.path.basename(__file__), outDir + "/" + os.path.basename(__file__))
#--------------------------------
#描画
#--------------------------------
animeView()
#--------------------------------
#終了メッセージ
#--------------------------------
print("描画終了")
dt_now = datetime.datetime.now()
print(dt_now)
if __name__ == "__main__":
main()
ソースの解析
地図画像を扱うために、Basemapライブラリをインポートします。
from mpl_toolkits.basemap import Basemap
動画対象の地図設定を行います。
#画像選択
map = Basemap(projection='ortho'
,lon_0=-crnrlon
,lat_0=40
,resolution='l')
グリッド設定を行います。
#グリッド設定
map.drawmeridians(np.arange(-360, 360, 10))
map.drawparallels(np.arange(-90, 90, 10))
地図のカラー設定を行います。
#カラー設定
map.drawcountries(color='lightblue',linewidth=0.2)
#map.fillcontinents(color='darkgreen',lake_color='darkgreen')
map.fillcontinents(color='navy',lake_color='navy')
map.drawmapboundary(fill_color='royalblue')
作成画像
関連記事
- Maximaでトーラスの結び目を描画目次1 Maximaでのソースコード2 出力画像3 高画質販売4 関連記事5 最近の投稿6 過去の投稿 Max… 続きを読む »
- Maxima plot3d ファイル出力目次1 Maximaでのソースコード(平面)2 出力画像3 関連記事4 最近の投稿 Maximaでのソースコー… 続きを読む »
- Maximaで世界地図を描画目次1 Maximaでのソースコード(平面)2 出力画像3 Maximaでのソースコード(地球儀)4 出力画像… 続きを読む »
- Maximaで波模様を描画目次1 Maximaでのソースコード2 出力画像3 関連記事4 最近の投稿 Maximaでのソースコード 「 … 続きを読む »
- Maximaで巻貝モデルを描画目次1 Maximaでのソースコード2 出力画像3 関連記事4 最近の投稿 Maximaでのソースコード 「 … 続きを読む »
最近の投稿
- LaTexの数式エディタ texstudioのインストール手順目次1 概要2 TexLiveのインストール手順3 texstudioのインストール手順を4 編集後記5 関連… 続きを読む »
- 【数学 大学入試過去問題】回転移動行列の帰納法証明問題解説目次1 概要2 問題3 解答4 前提知識4.1 帰納法4.2 三角関数の加法定理5 今後の学習拡大6 編集後記… 続きを読む »
- 基本情報技術者令和3年免除試験 午前問56 Service Level Agreement目次1 問題2 選択3 回答4 解説5 編集後記6 関連記事7 最近の投稿8 過去の投稿9 管理者が運営してい… 続きを読む »
- 基本情報 R3年免除 Pm 問51 EVM(Earned Value Management)管理目次1 問題2 選択3 回答4 解説5 関連YouTube6 編集後記7 関連記事8 最近の投稿9 過去の投稿… 続きを読む »
- TeraTermの自動ログイン マクロ(Windows編)目次1 概要2 「ttl」ファイルを「Tera Term Nacro Interpreter」に設定3 Ter… 続きを読む »
過去の投稿
- 2023年1月 (4)
- 2022年12月 (1)
- 2022年11月 (6)
- 2022年10月 (3)
- 2022年9月 (2)
- 2022年7月 (3)
- 2022年6月 (1)
- 2022年5月 (1)
- 2022年4月 (3)
- 2022年3月 (1)
- 2022年2月 (4)
- 2021年12月 (1)
- 2021年11月 (1)
- 2021年10月 (2)
- 2021年8月 (2)
- 2021年7月 (1)
- 2021年6月 (2)
- 2021年5月 (2)
- 2021年4月 (2)
- 2021年3月 (6)
- 2020年8月 (1)
- 2020年6月 (3)
- 2020年4月 (1)
- 2019年4月 (2)
- 2018年9月 (1)
- 2018年2月 (1)
- 2018年1月 (3)
- 2017年12月 (1)