FCPXMLから、ノンドロップタイムコードを導く計算式
CalcaというMacアプリを使っています。
Markdownを使って書けるテキストエディタみたいなものなのですが、計算をして表示してくれる機能があって、良いです。簡単なプログラミングツールみたいになります。
安定性と、日本語との相性はあんまりよくなさそうですが。
このアプリで、FCPXMLからチャプターマーカーのタイムコード(なんか分数で表記されています)を取り出して、HH:MM:SS:FFの形式で表記し直す方法を考えております。
そのXMLではこんな感じで表記されているのです。
<chapter-marker start="727727/7500s" duration="2002/60000s" value="チャプタ 2" posterOffset="11/30s"/>
<chapter-marker start="1940939/2500s" duration="2002/60000s" value="チャプタ 3" posterOffset="11/30s"/>
<chapter-marker start="39976937/15000s" duration="2002/60000s" value="チャプタ 4" posterOffset="11/30s"/>
<chapter-marker start="72563491/15000s" duration="2002/60000s" value="チャプタ 5" posterOffset="11/30s"/>
<chapter-marker start="223290067/30000s" duration="2002/60000s" value="チャプタ 6" posterOffset="11/30s"/>
ノンドロップフレームタイムコードの計算
関数の定義
frames(x) = x / duration
ff(x) = frames(x) mod frame
seconds(x) = (frames(x) - ff(x)) / frame
ss(x) = seconds(x) mod second
minutes(x) = (seconds(x) - ss(x)) / second
mm(x) = minutes(x) mod minute
hours(x) = (minutes(x) - mm(x)) / minute
hh(x) = hours(x) mod hour
ここがまとめの関数です。
f(x) =
let duration = 2002/60000 in
let frame = 30 in
let second = 60 in
let minute = 60 in
let hour = 60 in
[hh(x),mm(x),ss(x),ff(x)]
計算の実行
c1 = f(727727/7500) => [0, 1, 36, 28]
c2 = f(1940939/2500) => [0, 12, 55, 18]
c3 = f(37037/80) => [0, 7, 42, 15]
c5 = f(39976937/15000) => [0, 44, 22, 14]
c6 = f(72563491/15000) => [1, 20, 32, 22]
c7 = f(223290067/30000) => [2, 3, 55, 17]
ドロップフレームタイムコードの計算
これの計算式がうまく思いつきません。
誰か教えてください。