MMDのVMD形式をPythonで読込む
Miku Miku Danceを今更ながらに少し触った…。
VMDモーションファイルファイルをPythonで読込む方法(途中までを検討してみた)
途中までしか作っていませんが、こんな感じです。
import struct
def read_mmd_vmd(filepath):
data = open(filepath, "rb").read()
struct.unpack_from("<30s",data,0)[0].decode('cp932')
header = struct.unpack_from("<30s",data,0)[0].decode('cp932')
if header != 'Vocaloid Motion Data 0002\x00\x00\x00\x00\x00' :
print('Header error : "Vocaloid Motion Data 0002" is nothing.')
return
ret = {}
name = struct.unpack_from("<20s",data,30)[0].decode('cp932').replace('\x00','').strip()
ret['name'] = name
keypoints = []
for i in range(num_keypoints):
try:
keypoint_data = data[54+i*111:54+(i+1)*111]
name,frame_num,px,py,pz,rx,ry,rz,rw = struct.unpack_from("<15sIfffffff",keypoint_data,0)
keypoint = {}
keypoint['name' ] = name.decode('cp932').replace('\x00','')
keypoint['frame_num'] = frame_num
keypoint['position' ] = [px,py,pz]
keypoint['rotation' ] = [rx,ry,rz,rw]
keypoints.append(keypoint)
except:
raise "Error:..."
pass
ret['keypoints'] = keypoints
return ret
filepath = 'test.vmd'
read_mmd_vmd(filepath)
結果
{'name': 'Sour_Len_Black',
'keypoints': [{'name': '操作中心',
'frame_num': 0,
'position': [0.0, 0.0, 0.0],
'rotation': [0.0, 0.0, 0.0, 1.0]},
{'name': '全ての親',
'frame_num': 0,
'position': [0.0, 0.0, 0.0],
'rotation': [0.0, 0.0, 0.0, 1.0]},
{'name': 'センター',
'frame_num': 0,
:
おすすめ記事
サーバー以外の端末から接続する方法(開発環境版向け、本番環境以外向け) - Django
その他ネタもの - Python
Django Adminのパスワードを忘れたら? - Python
to_excelでxlsx,xlsファイルを書き込む / Python Pandas
OpenCVで動画作成 VideoWriter - Python徹底解説
read_excelでxls、xlsxを読み込む / Python pandas
Supponsered
もっとPythonを学びたいなら
Python徹底解説
Python - Blenderで3D開発を!
Python - OpenCV徹底解説
Python - Pandas徹底解説
外部サイト
↓プログラムを学んでみたい場合、学習コースなどもおすすめです!