从GIF中提取帧

时间:2014-10-27 08:53:06

标签: macos applescript frame extract gif

我正在尝试使用Applescript或终端(或使用do shell脚本命令通过applescript终端)自动从选定的.gif文件中提取帧。我知道如何使用Preview.app进行单击和拖动方法,但有没有办法自动执行此操作?

谢谢! 埃里克

3 个答案:

答案 0 :(得分:12)

ImageMagick为您提供了一个cmdlet,可以提取动画gif的帧。

这将提取文件“animated.gif”的前10帧

# convert 'animated.gif[0-10]' frames%03d.png

答案 1 :(得分:8)

对于有兴趣使用原生预览应用程序导出单帧的人...

  1. 使用OS X原生预览应用
  2. 打开GIF
  3. 滚动到要解压缩的框架
  4. 点击图标(在左侧窗格中)并将其拖动到桌面
  5. http://www.macobserver.com/tmo/article/preview-extracting-frames-from-animated-gifs

答案 2 :(得分:3)

您可以使用 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文件的对话框,一个用于选择目标文件夹的对话框。