2014-10-27 4 views
4

Я пытаюсь использовать Applescript или Terminal (или терминал через applescript, используя команду сценария do shell), чтобы автоматически извлекать кадры из выбранного файла .gif. Я знаю, как сделать метод click и drag, используя Preview.app, но есть ли способ сделать это автоматически?Извлечение фреймов из GIF

Спасибо! Eric

ответ

1

Вы можете использовать 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 файлы, диалоговое окно, чтобы выбрать папку назначения.

+0

Большое спасибо! У меня есть один последний вопрос, прежде чем мое приложение будет завершено. Как установить переменную, представляющую количество извлеченных GIF (по существу, строящую эту команду)? – user3541125

+0

См. Обновленный ответ, я добавляю 'print (i + 1)' к pScript – jackjr300

+0

Это потрясающе. Отличный ответ! Просто хочу указать, что вы можете заменить NSGIFFileType на NSPNGFileType или NSJPEGFileType, чтобы получить экспортированные файлы в других форматах. –

10

ImageMagick дает вам командлет, который позволяет извлекать кадры анимированного gif.

Это извлечет первые 10 кадров файла «animated.gif»

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

есть ли способ сделать это без установки внешних приложений? Я подумываю написать приложение, в котором вы просто выбираете файл, и после его щелчка по кадрам GIF генерируются в указанном месте – user3541125

+0

[OS X имеет глотки] (http://superuser.com/a/571068/309603) – user309603

+1

@ user3541125 На анимированном GIF, глоток может преобразовать только первый кадр – jackjr300

8

Для тех, кто заинтересован в том, чтобы экспортировать один кадр с нативной Preview приложение ...

  1. Открыть GIF с OS X родной Preview приложение
  2. Выделите кадр, который вы хотите извлечь
  3. Нажмите и перетащите значок (в левой панели) на рабочий стол

http://www.macobserver.com/tmo/article/preview-extracting-frames-from-animated-gifs

+0

Обратите внимание, что Preview не обрабатывает большие GIF-файлы, например, 10+ МБ или сотни фреймов. –

+0

Вы можете использовать Gif Preview, доступный в Mac App Store! – Khaaba

Смежные вопросы