- 2008-05-22 (木)
- memo
ムービーを元のファイルと同じ速さで再生させる方法がいまいち良くわからんかったので本家のライブラリの解説を訳してみた。
http://nodebox.noboko.com/library/pixels/quicktime.html
よくわからんかった、、、、 で結局結論は、処理が追い付いてないってことかな。。。
サンプルではspeed(50)でfps50にして、frame(FRAME*0.1)とかしてるけど、
そうすると一秒経過するとFRAME=50になる。てことはframe(5)になって、1秒後には、5秒時のフレームが読み込まれるようだけど、どう考えてもそんな速度出てない。
不思議に思って、QuickTimeでfps合わせて書き出してみたら、ものすごい早いムービーになった。
てことはものすごく処理がおいついてなかったてことね。
あくまでspeed()は最大値なんだろうね。
リアルタイムでレンダリングしてる時は思った以上に遅い値なのかもしれん。
よくわからんけどフレーム単位の処理してる所、quicktimeだけタイムラインでフレームしてるからあかんのかな。QCでいうところのPatch Timeみたいなもんは無いのかな?
苦肉の策(ってほどでも無いけど)で、それなら、オーディオから再生位置とりこんで、フレーム位置にすればいいじゃん。
ということでサンプルを改造。
try:
quicktime = ximport("quicktime")
except:
quicktime = ximport("__init__")
reload(quicktime)
movie = quicktime.movie("twisted_world.mp4")
audio = quicktime.audio("twisted_world.mp4")
audio.play()
size(movie.width, movie.height)
speed(movie.fps)
def draw():
frame = movie.frame(audio.time)
image(None, 0, 0, data=frame.data, width=frame.width)
サンプルのmp4音声無いじゃん。と思ったけどきちんとaudio.time返してくれてるみたい。 デカいファイルで上の処理すると音声最後まで垂れ流しになるので気をつけてね。
欠点はQCと同じでQuickTime書き出しの時、音は無視されるからあくまで再生用の速度補正にしか使えん。
で、やっぱカクカクするしね。むずい。
- Newer: textを扱う ≫
- Older: ≪ 動画ファイルを再生する