这个答案很长,因为您的评论似乎表明您的主要兴趣是AppleScript本身,而不是将视频从FLV转换为MP4。如果是这种情况,我强烈建议从一个好的AppleScript参考开始,仔细阅读并学习使用可用的工具(尤其是脚本编辑器和应用程序词典)。尝试通过修改现有应用程序来学习新语言不利于调试,并且最终可能会导致非常糟糕的事情,例如货物编程。那说,
我首先打开QuickTime Player的字典(
文件 - >
打开字典在脚本编辑器中)以查看可用的命令。在我的QuickTime Player(7.6.4)版本
export
中,QuickTime Player Suite中有一个命令:
导出 v:将电影或曲目导出到文件
导出参考:要导出到文件的电影或曲目
:目标文件
为 AIFF / Apple TV / AVI / BMP / DV流/快速启动QTVR电影/ FLC /提示
电影/图像序列/帧间压缩VR对象电影/ iPhone /
iPhone手机/ iTunes / MuLaw / MPEG2 / MPEG4 /图片/ QuickTime媒体
link / QuickTime电影/ QuickTime TeXML /标准MIDI / System 7声音/
文本文件/ ThreeGPP / wave:所需的文件类型
[ 使用默认设置/最新设置]:导出设置
使用
[ 使用设置预设字符串]:导出设置的名称
预设使用
[ 使用设置文件]:包含导出设置的文件
[ 替换布尔值]:是否应该先删除原始文件?
一个小Googling表明,“iPhone”文件类型指的.m4v文件,所以第一个步骤可以代替save first document in target_path as ".m4v"
用export first document to target_path as iPhone
。但是,通过字典查看更多信息表明还有一个can export
命令:
可以导出 v:确定是否可以将电影或曲目导出到所需的
类型
可导出参考:电影或曲目导出
为 AIFF / Apple TV / AVI / BMP / DV流/快速启动QTVR电影/ FLC /提示
电影/图像序列/帧间压缩VR对象电影/ iPhone /
iPhone手机/ iTunes / MuLaw / MPEG2 / MPEG4 /图片/ QuickTime媒体
link / QuickTime电影/ QuickTime TeXML /标准MIDI / System 7声音/
文本文件/ ThreeGPP / wave:所需的文件类型
→布尔值:是否支持导出
因此我们应该检查是否可以在实际执行之前以iPhone / .m4v格式导出电影:
if (can export first document as iPhone) then
export first document to target_path as iPhone
else
error "Cannot export " & (source_file as string) & " in .m4v (iPhone) format."
end if
但是,如果我们停在这里,我们可能会注意到某些输出文件在某一点之外无法正常播放,因为QuickTime可以异步加载文件(即,不是一次性加载)。在我们告诉它导出之前,我们应该尝试检查QuickTime Player是否已完成加载电影 ; 通过检查字典中列出的负载状态的完整列表,并假设每个电影最终都处于完成状态或错误状态,我们可以相对容易地添加它。
set error_states to {load state unknown, load error}
set successful_states to {loaded, complete}
repeat until load state of first document is in (error_states & successful_states)
delay 0.1
end repeat
if (load state of first document is in successful_states) then
if (can export first document as iPhone) then
export first document to target_path as iPhone
else
error "Cannot export " & (source_file as string) & " in .m4v (iPhone) format."
end if
else
error "File is not in a successful load state: " & (load state of first document as string)
end if