3

我想从 Applescript 中的快速电影中提取时间码。

通过使用此脚本

tell application "QuickTime Player"
    set themovie to open thefile
    set thetracks to tracks of document 1
    repeat with thetrack in thetracks
        if the kind of thetrack is "Timecode" then
            get the properties of thetrack
        end if
    end repeat
end tell

我可以得到时间码轨道,轨道的属性是:

{is audio variable rate:true, is video gray scale:false, audio sample size:0, class:track, audio sample rate:0.0, sound balance:0, preload:false, streaming bit rate:-1.0, duration:960300 , 语言:"English", 声道数:0, 层数:0, 内容:缺失值, 低音增益:0, 开始时间:0, 数据格式:"时间码", 高音增益:0, 音频特性:false, sound音量:0,掩码:缺失值,视频深度:0,位置:{0, 0},id:4,高质量:false,去隔行字段:false,href:“”,自然尺寸:{0, 0},单字段:假,种类:“时间码”,索引:4,数据大小:38412,视觉特征:假,数据速率:100,从不清除:假,透明度:49,章节列表:{},名称:“时间码轨道” ,备用:{},操作颜色:{32768, 32768, 32768},启用:true,类型:“tmcd”,流质量:-1.0,传输模式:传输模式未知,维度:{0, 0},当前矩阵:{{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}}

这些似乎都与时间码无关。请注意,内容属性是“缺失值”

如果我尝试获取电影的当前时间,它会返回 0,即使时间码不是从 0 开始。

到目前为止,我正在考虑我在网上发现的内容,这是不可能的。请证明我错了

TIA-stib

4

2 回答 2

2

我找到了解决方法。这里有一个名为 timecodereader 的开源命令行应用程序

现在它需要一点修改,在 timecodereader.m 的第 152 行,您需要将输出从 stderr 更改为 stdout,以便 applescript 可以读取结果。像这样:

fprintf(stderr,"%s\n", [timecodeString fileSystemRepresentation]);

fprintf(stdout,"%s\n", [timecodeString fileSystemRepresentation]);

一旦你构建了它并将结果放在你的可执行路径中,你就可以使用

set theStartTC to do shell script "timecodereader /Posix/Path/To/My/Movie.mov"

它返回一个带有第一帧时间码的字符串。

于 2009-07-15T02:02:20.917 回答
0

您可以使用曲目的名称而不是种类:

on open myfiles
 repeat with thefile in myfiles

  tell application "QuickTime Player"
   set themovie to open thefile
   set thetracks to tracks of document 1
   repeat with thetrack in thetracks
    if the name of thetrack is "Closed Caption Track" then
     set thetrack's enabled to false

    end if
   end repeat
  end tell
 end repeat
end open
于 2009-10-08T17:26:11.047 回答