- 2008-05-21 (水)
- memo
本体では無理。
quicktimeライブラリを使う。
ライブラリ内のquicktime_example1.py
try:
quicktime = ximport("quicktime")
except:
quicktime = ximport("__init__")
reload(quicktime)
movie = quicktime.movie("twisted_world.mp4")
print movie.fps
print movie.duration
size(movie.width, movie.height)
speed(50)
def draw():
# The frame() method grabs a frame from the movie
# at the given time in seconds.
frame = movie.frame(FRAME*0.1)
image(None, 0, 0, data=frame.data, width=frame.width)
Python(というかマシン語全般初心者)全くわからんけど順番に読み解いてみる。
ximport()ってのがライブラリ呼ぶコマンドらしい。
最初の5行で読みこんでる。
ライブラリにquicktime無いか探して、無ければ同一フォルダにinit.pyが無いか探して、再度quicktimeを読み込む。
ライブラリについての解説はここ。
http://nodebox.net/code/index.php/Libraries
try:
quicktime = ximport("quicktime")
except:
quicktime = ximport("__init__")
reload(quicktime)
ライブラリが確実に/Users/俺/Library/Application\ Support/NodeBox/にあるのが分かっていれば
変数=ximport("ライブラリ名")
で呼ぶだけでいいみたい。保険だね。
読み込んだライブラリのコマンドは変数にピリオド付けて読み込む
movie = quicktime.movie("twisted_world.mp4")
パス名にuを付けて
movie = quicktime.movie(u"twisted_world.mp4")
としても日本語ファイル名が上手く扱えないようです。エラーになります。残念。
ここでquicktimeのリファレンスを見る。
http://nodebox.net/code/index.php/Quicktime
大きく分けてmovie()とaudio()の二つのコマンドがある。
今回使うのはmovie()の方。
更にピリオドで繋げて色々なプロパティーを得られる。
movie.path: the source path.
movie.duration: the length of the movie in seconds.
movie.has_video: True if the movie has a video track.
movie.has_audio: True if the movie has an audio track.
movie.width: the width of the movie in pixels.
movie.height: the height of the movie in pixels.
変数にmovieなんて言葉つかってるからわかりづらかったけど書き直すとこういうわけね。
try:
a = ximport("quicktime")
except:
a = ximport("__init__")
reload(quicktime)
print quicktime.movie("twisted_world.mp4").fps
print quicktime.movie("twisted_world.mp4").duration
size(quicktime.movie("twisted_world.mp4").width, quicktime.movie("twisted_world.mp4").height)
speed(50)
def draw():
frame = quicktime.movie("twisted_world.mp4").frame(FRAME*0.1)
image(None, 0, 0, data=quicktime.movie("twisted_world.mp4").frame(FRAME*0.1).data, width=frame.width)
こんな書き方は面倒だから変数に代入するのねー。
話を戻す。
print movie.fps
print movie.duration
ムービーのfpsや、長さを表示する。
size(movie.width, movie.height)
speed(50)
描画スペースのサイズをムービーサイズにする。
speed()ってコマンドはリファレンスには書いてないけど、アニメーションの際のfpsを設定する。
解説はチュートリアルのほうにある。
http://nodebox.net/code/index.php/Animation
For an animation to work, it needs three things:
speed(): the speed() command indicates the speed of the animation in frames per second. Note that this is a maximum: big animations will require more work, and thus run slower.
setup(): your own setup() definition, declaring global variables and initializing them.
draw(): your own draw() definition, doing the actual drawing.
setup()はアニメーションの初期値、draw()は実際の処理。
それぞれdef setup():、def draw():として処理を書く。
今回は初期値の設定は無し、def draw():のみ
def draw():
# The frame() method grabs a frame from the movie
# at the given time in seconds.
frame = movie.frame(FRAME*0.1)
image(None, 0, 0, data=frame.data, width=frame.width)
frame()メソッドはムービーから与えられた秒のフレームをグラブする。 訳おわり。
FRAMEってのは定義済の変数でアニメーションにおけるカレントフレームである。
http://nodebox.net/code/index.php/Variables
image()は画像読み込みの時は最初のパラメータでパスを指定するけど、アニメーションの場合は第一パラメータはNoneとして、 data= で読み込む。quicktimeの場合はmovie.frame.data
とまーこんなかんじだけど読むだけで疲れた。
Python勉強せねば。
- Newer: Quicktimeの時間の取り扱い ≫
- Older: ≪ フルスクリーン