【发布时间】:2014-12-22 10:01:16
【问题描述】:
我正在尝试使用 Applescript 或终端(或通过 applescript 使用 do shell script 命令的终端)自动从选定的 .gif 文件中提取帧。我知道如何使用 Preview.app 执行单击和拖动方法,但有没有办法自动执行此操作?
谢谢! 埃里克
【问题讨论】:
标签: macos applescript frame extract gif
我正在尝试使用 Applescript 或终端(或通过 applescript 使用 do shell script 命令的终端)自动从选定的 .gif 文件中提取帧。我知道如何使用 Preview.app 执行单击和拖动方法,但有没有办法自动执行此操作?
谢谢! 埃里克
【问题讨论】:
标签: macos applescript frame extract gif
ImageMagick 为您提供了一个 cmdlet,可以提取动画 gif 的帧。
这将提取文件“animated.gif”的前 10 帧
# convert 'animated.gif[0-10]' frames%03d.png
【讨论】:
对于任何对使用本机预览应用导出单个帧的方式感兴趣的人...
http://www.macobserver.com/tmo/article/preview-extracting-frames-from-animated-gifs
【讨论】:
您可以使用 AppKit 框架从 GIF 中提取帧。
这是 AppleScript(在 Mavericks 上测试):
set gifFiles to choose file of type "com.compuserve.gif" with prompt "Select GIF's files" with multiple selections allowed
set dest to quoted form of POSIX path of (choose folder with prompt "Select the folder to save gif's frames")
set pScript to quoted form of "from AppKit import NSApplication, NSImage, NSImageCurrentFrame, NSGIFFileType; import sys, os
tName=os.path.basename(sys.argv[1])
dir=sys.argv[2]
app=NSApplication.sharedApplication()
img=NSImage.alloc().initWithContentsOfFile_(sys.argv[1])
if img:
gifRep=img.representations()[0]
frames=gifRep.valueForProperty_('NSImageFrameCount')
if frames:
for i in range(frames.intValue()):
gifRep.setProperty_withValue_(NSImageCurrentFrame, i)
gifRep.representationUsingType_properties_(NSGIFFileType, None).writeToFile_atomically_(dir + tName + ' ' + str(i + 1).zfill(2) + '.gif', True)
print (i + 1)"
repeat with f in gifFiles
set numberOfExtractedGIFs to (do shell script "/usr/bin/python -c " & pScript & " " & (quoted form of POSIX path of f) & " " & dest) as integer
end repeat
此脚本显示两个对话框窗口,一个选择 GIF 文件的对话框,一个选择目标文件夹的对话框。
【讨论】:
print (i + 1) 附加到 pScript