我想从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
我可以获得时间码曲目,曲目的属性是:
{是音频变速率:是的,是视频 灰度:false,音频样本大小:0, 类:音轨,音频采样率:0.0, 声音平衡:0,preload:false, 流比特率:-1.0, 持续时间:960300,语言:“英语”, 音频通道数:0,图层:0, 内容:缺失值,低音增益:0, 开始时间:0,数据格式:“时间码”, 高音增益:0,音频 特点:假,音量:0, 掩码:缺失值,视频深度:0, 位置:{0,0},id:4,高 质量:假,去隔行 fields:false,href:“”,自然 维度:{0,0},单个字段:false, kind:“Timecode”,索引:4,数据 尺寸:38412,视觉 特征:虚假,数据率:100, 从不清除:虚假,透明:49, chapterlist:{},name:“Timecode Track”, alternate:{},操作颜色:{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}}}
其中没有一个与时间码有任何关系。请注意,contents属性是“缺失值”
如果我尝试获取电影的当前时间,则返回0,即使时间码不是从0开始。
我正在考虑到目前为止我在网上发现的事情,这是不可能的。请证明我错了
TIA -stib
答案 0 :(得分:2)
我找到了解决方法。有一个名为timecodereader的开源命令行应用程序here
现在它需要一点点黑客攻击,在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"
它返回一个带有第一帧时间码的字符串。
答案 1 :(得分: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