【修正版】猫リリアリスで Nostalogic MME立体視。【交差法】
の修正版。YouTube に上げた回転の滑らかさを訂正したものから更に回転の不連続を修正。あとは動画コメントに書いた通り猫村さんの動作の微調整を。
ついでで
のパラメータを
FRAME_MIX_NO = 2 # ミックスするフレームの数。 # 例えば 120fps のものに 4 を指定すると 120/4 = 30fps になる ATTENUATION = 3 # 減衰率。1 で全てのフレームを等分に合成。 # 大きな値にするほど過去フレームが減衰する。(整数でなくても可)
から
FRAME_MIX_NO = 2 # ミックスするフレームの数。 # 例えば 120fps のものに 4 を指定すると 120/4 = 30fps になる ATTENUATION = 2 # 減衰率。1 で全てのフレームを等分に合成。 # 大きな値にするほど過去フレームが減衰する。(整数でなくても可)
と ATTENUATION を 1減らして残像感を大きくしてみました。60→30fps だとこれくらいの方がいい感じ。
今回テストとしてHD画質の動画を扱ってみたのですが。4分半程のこの動画で MikuMikuDance からの出力に 3時間、aviutl での連番BMP出力 5分、それの framemixer.py での加工に 1時間、その後BMPを aviutil に読み込んで、それをAVI出力するのにまた 3時間、そしてつんでれんこするのに 1時間……。(マシンスペック: Celeron900 2.20GHz →http://toshibadirect.jp/pc/catalog/pxw_k/)
もう当分は素にプレイヤーサイズ、30fps の動画でいいや。試してみたところ aviutl のモーションブラーも framemixer.py と同等な感じなのでこれも aviutil でやった方が手早いし。(というか 30fps ならフレームミックスする必要も無いし)*1
MikuMikuDance 上の作業以後の創造性とは無関係の作業に手間と時間を取られるというのも馬鹿らしいので、一通りのテストも終わったことだしここらへんは手控えて……いよいよモーション弄る方に! ……って手間かかるんだろうなぁ。
おまけとしてまた使用したカメラのモーションを
(VMDEditor 0.2 による CSV 化データです。好きに流用して可)
Vocaloid Motion Data 0002 カメラ・照明 Motion,bone,x,y,z,rx,ry,rz,x_p1x,x_p1y,x_p2x,x_p2y,y_p1x,y_p1y,y_p2x,y_p2y,z_p1x,z_p1y,z_p2x,z_p2y,r_p1x,r_p1y,r_p2x,r_p2y Expression,name,fact Camera,d,a,x,y,z,rx,ry,rz,x_p1x,x_p1y,x_p2x,x_p2y,y_p1x,y_p1y,y_p2x,y_p2y,z_p1x,z_p1y,z_p2x,z_p2y,r_p1x,r_p1y,r_p2x,r_p2y,d_p1x,d_p1y,d_p2x,d_p2y,a_p1x,a_p1y,a_p2x,a_p2y 0,-50,45,0,10,5,6,0,-10,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 7380,-40,45,0,10,0,10,2520.011,0,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 7260,-40,45,0,10,0,10,2520.011,0,20,20,107,107,20,20,107,107,20,20,107,107,21,67,67,127,20,20,107,107,20,20,107,107 7500,-80,45,0,20,0,0,2520.025,0,65,0,70,127,65,0,70,127,65,0,70,127,65,0,70,127,65,0,70,127,65,0,70,127 1000,-48.62259,45,0,10,4.311295,6.196,123.465,-9.51,20,20,107,107,20,20,107,107,20,20,107,107,64,9,104,60,20,20,107,107,20,20,107,107 6260,-41.37741,45,0,10,0.688705,9.846,2423.116,-0.385,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 6000,-41.73554,45,0,10,0.8677683,9.666,2309.445,-0.836,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 5000,-43.11295,45,0,10,1.556473,8.972,1872.249,-2.57,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 4000,-44.49036,45,0,10,2.245179,8.278,1435.053,-4.305,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 3000,-45.86777,45,0,10,2.933884,7.584,997.857,-6.04,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 2000,-47.24518,45,0,10,3.622589,6.89,560.661,-7.775,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107,20,20,107,107 Light,r,g,b,x,y,z 0,0.5859375,0.46875,0.46875,-0.91,-0.34,0.28 7260,0.5859375,0.46875,0.46875,-0.91,-0.34,0.28 7380,0.46875,0.390625,0.46875,-0.91,-0.34,0.28 7500,0.390625,0.390625,0.46875,-0.91,-0.34,0.28
更におまけとして立体視 ED テロップ作成に作った Python スクリプトを
Python 使えない人には使い方が分からないでしょうけれども、Python 使える人なら解説不要でしょう。AS-IS なものとして置いておきます。
# -*- coding: utf-8 -*- u'''EDテロップ作成 Python 2.6.5 + Pygame 1.9.1 ''' import pygame from pygame.locals import * TESTVIEW = True # テストで見てみるだけなら True, 本番のBMP作成は False OFFSET = 2 # 立体視セット対応。広げる(手前に見えるようにする)なら増やす FONT = 'MEIRYO.TTC' # 使用するフォントファイル名 COLOR = 255, 255, 255 SOURCEIMAGE = 'ending.bmp' # テロップを重ねる元の画像ファイル STARTFILENO = 7501 # 開始するファイル名の最初。0フィルされた8桁の数値として出力 SCALE = 2 # 倍率。横幅640なら1, 横幅1280なら2 DEST = 'dest/' # 連番BMPを出力するフォルダ TIME = 30 * 3 # 1つのテロップを表示するフレーム数 ##最初の行がタイトル ##最後の行がアドレス。この行だけ空白区切りで改行表示 ##残りの中間がメインの文。ここだけ大きな文字で他より浮き上がって表示 data = ( u'''音楽 【ロリMEIKO】 Nostalogic (single edit) 【実写PV】 (yuukiss / rose) http://www.nicovideo.jp/watch/sm9874560''', u'''モーション 【Nostalogic】 Yumikoさんをトレースしてみた2 (最終回)【MMD】 (nori / Yumiko) http://www.nicovideo.jp/watch/sm12968853''', u'''モデル 「ハローキティといっしょ!」 猫村いろは(ボカロ) Ver.E (ISAO / Windows100% / okama) http://www.nicovideo.jp/watch/sm12958522 (UPDATEパッチ)''', u'''モデル 「クイーンズゲイト」 門を開く者 アリス Ver.100914_1 (かこみき / Niθ) http://www003.upp.so-net.ne.jp/kakomiki/''', u'''モデル 「CosmicBreak x MMD Re」 リリレイン Ver.2.01 (るちる / CyberStep) http://www.cyberstep.com/special/cbxmmd/''', u'''ステージ サイハテの場所 (アノマロかりんとう) http://anomarokarintou.blog37.fc2.com/''', u'''ツール MikuMikuDance Ver.7.23 (樋口優) http://www.geocities.jp/higuchuu4/''', u'''ツール MikuMikuEffect Ver0.11 (舞力介入P) http://www.nicovideo.jp/watch/sm12149815''', u'''ツール 立体視セット(MME) (Furia) http://www.nicovideo.jp/watch/sm12849049''', u'''ツール AviUtl version 0.99i8 (KENくん) http://spring-fragrance.mints.ne.jp/aviutl/''', u'''自作ツール framemixer.py ver.1.1.0 http://d.hatena.ne.jp/kadotanimitsuru/ 20100717/framemixer''', u'''Author kadotanimitsuru ''') def _escape(): for e in pygame.event.get(): if e.type == QUIT: return True elif e.type == KEYDOWN and e.key == K_ESCAPE: return True return False def _render(surface, image, x, y, offset=OFFSET): surface.blit(image, (x / 2 - image.get_width() / 2 - offset * SCALE, y)) surface.blit(image, (x * 1.5 - image.get_width() / 2 + offset * SCALE, y)) def textrender(surface, pos, text, font, bigfont): x, y = pos t = text.split('\n') title = font.render(t[0], True, COLOR) y += 12 * SCALE _render(surface, title, x, y, OFFSET - 1) y += font.get_linesize() y += 12 * SCALE for i in t[1:-1]: maintext = bigfont.render(i, True, COLOR) _render(surface, maintext, x, y) y += bigfont.get_linesize() for i in t[len(t)-1].split(): url = font.render(i, True, COLOR) _render(surface, url, x, y, OFFSET - 1) y += font.get_linesize() def main(): image = pygame.image.load(SOURCEIMAGE) x, y = image.get_size() screen = pygame.display.set_mode((x, y)) font = pygame.font.Font(FONT, 12 * SCALE) bigfont = pygame.font.Font(FONT, 16 * SCALE) file_no = STARTFILENO for text in data: work = image.copy() textrender(work, (x / 2, 0), text, font, bigfont) for n in range(TIME): pygame.display.set_caption('%08d.bmp' % file_no) if not TESTVIEW: pygame.image.save(work, '%s%08d.bmp' % (DEST, file_no)) file_no += 1 if _escape(): return screen.blit(work, (0, 0)) pygame.display.flip() return if __name__ == '__main__': try: pygame.init() main() finally: pygame.quit() ## 好きに改造して使ってください。