MMDのVMD形式をPythonで読込む

 

{{DZ_TITLE}}
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
サーバー以外の端末から接続する方法(開発環境版向け、本番環境以外向け) - Django
その他ネタもの - Python
その他ネタもの - Python
Django Adminのパスワードを忘れたら? - Python
Django Adminのパスワードを忘れたら? - Python
to_excelでxlsx,xlsファイルを書き込む / Python Pandas
to_excelでxlsx,xlsファイルを書き込む / Python Pandas
OpenCVで動画作成 VideoWriter - Python徹底解説
OpenCVで動画作成 VideoWriter - Python徹底解説
read_excelでxls、xlsxを読み込む / Python pandas
read_excelでxls、xlsxを読み込む / Python pandas
Supponsered

もっとPythonを学びたいなら

Python徹底解説
Python - Blenderで3D開発を!
Python - OpenCV徹底解説
Python - Pandas徹底解説

外部サイト
↓プログラムを学んでみたい場合、学習コースなどもおすすめです!

Comments

comments powered by Disqus