1

У меня есть около 1700 файлов фильмов QuickTime (некоторые имеют расширение .mov, большинство - нет; это не важно, все они рассматриваются системой как "фильм QuickTime", и это то, что они есть) в организованной структуре папок.

Используя QuickTime Pro 7, я могу просмотреть свойства файла и увидеть набор метаданных, которые он называет "аннотациями". Одна из этих аннотаций - это тег "Автор". Мне нужно перевернуть эту аннотацию к тегу "Artist", сохраняя данные внутри.

QuickTime Pro Свойства

... для каждого из этих 1700 с лишним файлов.

Каков наилучший вариант и реализация для автоматизации этого?

Я догадываюсь , что AppleScript может быть легко спроектирован, который просто перебирает содержимое этой структуры папок, ищет файлы этого типа, а затем выполняет переключение, но мой AppleScript-fu не годится.

1 ответ1

2

Ну, мне удалось придумать что-то (читай: грязный хак), которое выполняет то, что я хочу. Я использовал сценарии AppleScript и UI через Sikuli. Он может и должен быть значительно улучшен, например, с лучшей проверкой ошибок и отказоустойчивостью. В основном мне приходилось присматривать за ребенком, поскольку он прошел весь процесс, потому что каждые несколько десятков файлов он что-то давился. Тем не менее, это послужило моим целям и достигло моей цели.

global theCount

set theCount to 0 as number

tell application "Finder"
    set theFolder to choose folder with prompt "Select a directory:"
    display dialog "This script will open each QuickTime movie file contained within this folder and its subfolders in QuickTime Player 7, and change the Author attribute to an Artist attribute using the Sikuli IDE. Proceed?"
    my processFiles(theFolder)
    display dialog (theCount as string) & " files processed."
end tell

on processFiles(theFolder)
    tell application "System Events"
        set theItems to get the name of every disk item of theFolder
    end tell
    set theFolder to theFolder as string --do this to concatenate with item name in loop
    repeat with i from 1 to length of theItems --this is the loop that works on each file in the current folder
        set theItem to item i of theItems
        set theItem to (theFolder & theItem) as alias --get a file object
        set itemInfo to info for theItem --get the file's info
        if visible of itemInfo is true then --only work on invisibles
            if folder of itemInfo is false then --and check for folders first or next line will fail
                if type identifier of itemInfo is "com.apple.quicktime-movie" then
                    try --makes this more fault-tolerant
                        tell application "QuickTime Player 7"
                            open theItem
                        end tell
                        set theCount to theCount + 1
                        do shell script "java -jar /Applications/Sikuli-IDE.app/Contents/Resources/Java/sikuli-script.jar /Users/username/Desktop/flip\\ to\\ artist\\ source.sikuli" --Sikuli has a better command line interface, but it wasn't working on the current build. This is connecting directly to its java executable, and is REALLY slow as a result.
                    end try
                end if
            else if folder of itemInfo is true then
                do shell script "touch \"" & POSIX path of theItem & "\"" --do this to track the progress of the script based on folder modification date
                my processFiles(theItem) --operate recursively until all files are processed
            end if
        end if
    end repeat
end processFiles

Сценарий Sikuli по сути:

switchApp("QuickTime Player 7")
keyDown(Key.CMD)
type("j")
keyUp(Key.CMD)
click([Author annotation tag])
click([Artist option])
keyDown(Key.CMD)
type("s")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
waitVanish([a QuickTime window])

Я не опытный разработчик Sikuli, но почти наверняка нажатия клавиш должны быть включены в AppleScript как действия пользовательского интерфейса. Эта часть не сложная. Это сложный выбор. AppleScript также может проверять атрибут Author; этот материал задокументирован в словаре AppleScript, но свойство доступно только для чтения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .