【问题标题】:Calculating Final Cut Pro X xml sequence duration计算 Final Cut Pro X xml 序列持续时间
【发布时间】:2014-12-06 03:06:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml parsing frame-rate finalcut


    【解决方案1】:

    我不确定我是否理解你的问题,但从你的例子中,我明白了:

    • 时间线从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);
    }
    

    如果您愿意,可以轻松翻译成任何其他语言。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多