计算Final Cut Pro X xml序列持续时间

时间:2014-10-10 21:03:15

标签: xml parsing frame-rate finalcut

Final Cut Pro X xml (fcpxml documentation,第19页)元素具有持续时间属性,例如“duration = 264100 / 2400s”。 Denumerator应该是指帧速率(每秒24帧)。如何以帧或秒和帧计算项目持续时间?

摘自文件: “时间值用64位分子和32位分母表示为有理秒数。 例如,NTSC兼容媒体的帧速率使用1001 / 30000s(29.97 fps)的帧持续时间或 1001 / 60000s(59.94 fps)。如果时间值等于整数秒,则可以减少分数 整秒(例如,5秒)。“

编辑: 实际上持续时间非常明显...... 例如。 duration =“4500 / 2400s”是: 4500 // 2400是1秒; 4500%2400是2100或21帧,意思是持续时间是00:00:01:21。

但我仍然无法找到如何计算时间轴中的项目时间代码以及所有这些其他属性(标题从时间轴00:00:04:22开始,时间轴持续时间为00:01: 50:11,所有@ 24fps):

<title name="Basic Title: The Big Lebowski" lane="1" offset="8651800/2400s" ref="r2" duration="6000/2400s" start="3600s">

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,但从你的例子来看,我明白了:

  • 时间轴开始01:00:00:00
  • 标题显示在01:00:04:22
  • 并持续00:00:02:12(60帧@ 24fps)

我从以下Perl函数得到了这些结果,它将帧速率作为第二个参数。

sub fcptime2tc {
    my ($t, $fps) = @_;

    # extract $x, $y from stuff like "8651800/2400s" or "3600s"
    my ($x, $y) = $t =~ m!^(\d+)(/\d+)s$!;

    $y =~ s!^/!!; # delete "/"
    $y ||= 1;

    my $seconds = $x / $y;

    my $f  = sprintf( "%02.0f", ( $seconds - int($seconds) ) * $fps );

    my $z  = int($seconds);
    my $s  = sprintf( "%02d", $z % 60 ); $z /= 60;
    my $m  = sprintf( "%02d", $z % 60 ); $z /= 60;
    my $h  = sprintf( "%02d", $z % 24 );

    return join(":", $h, $m, $s, $f);
}

如果你愿意,翻译成任何其他语言应该是微不足道的。

这没有考虑到的是愚蠢的丢帧时间码。