3

Final Cut Pro X xml (fcpxml 文档,第 19 页)元素具有类似“duration=264100/2400s”的持续时间属性。分子应表示帧速率(每秒 24 帧)。如何以帧或秒和帧为单位计算项目持续时间?

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

编辑:实际上持续时间是如此明显......例如。duration="4500/2400s" is: 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">

4

1 回答 1

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);
}

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

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

于 2016-08-04T17:40:02.290 回答