Я пытаюсь заставить работать скрипт, который может выполнять пакетный экспорт видеофайлов в формате .mts через quicktime в файлы .mov в 1080p. Сценарий завершается ошибкой со следующей ошибкой: «Действие« Запустить AppleScript »обнаружило ошибку:« QuickTime Player получил ошибку: не удалось преобразовать файл (документ «00000.MTS») в тип «class fsrf». «». Я полагаю, это как-то связано с использованием путей к текстовым файлам? Обратите внимание: у меня нет опыта работы с Applescript, и я буду очень признателен за любую помощь, чтобы заставить этот простой скрипт работать. В настоящее время в автомате как услуга:

on run {inputFiles}
if inputFiles is equal to {} then
    set inputFiles to (choose file with prompt "Select the file(s) to convert:" with multiple selections allowed without invisibles)
end if
open inputFiles
end run

on open droppedItems
tell application "Finder" to set inputFolder to (container of first item of droppedItems) as Unicode text
set outputFolder to (choose folder with prompt "Select output folder:" default location (inputFolder as alias)) as Unicode text

set exportPreset to (choose from list {"Movie", "iPhone", "iPod", "480p", "720p", "1080p"} with prompt "Choose QuickTime Export Preset:") as Unicode text
if exportPreset is equal to "false" then
    return
end if

repeat with currentItem in droppedItems
    repeat until getProcessPercentCPU("CoreMediaAuthoringSessionHelper") is equal to ""
    end repeat

    tell application "Finder" to set fileName to name of currentItem as Unicode text
    set fileName to text 1 thru ((fileName's length) - (offset of "." in ¬
        (the reverse of every character of fileName) as text)) of fileName
    convertFile(currentItem, outputFolder & fileName & ".mov", exportPreset)
end repeat
end open

on convertFile(inputFile, outputFile, exportPreset)

tell application "QuickTime Player"
    set thisMovie to open inputFile
    open for access file thisMovie
    close access file thisMovie
    export thisMovie in (outputFile) using settings preset exportPreset
    close thisMovie
end tell
end convertFile

on getProcessPercentCPU(processName)
do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processName & "$/ {print $1}'"
end getProcessPercentCPU
0
JSV 12 Мар 2018 в 20:08

2 ответа

Лучший ответ

Попробуйте изменить:

set outputFolder to (choose folder with prompt "Select output folder:" default location (inputFolder as alias)) as Unicode text

Чтобы :

set outputFolder to POSIX path of (choose folder with prompt "Select output folder:" default location (inputFolder as alias))

А также:

convertFile(currentItem, outputFolder & fileName & ".mov", exportPreset)

Чтобы :

set outputFile to POSIX file (outputFolder & fileName & ".mov")
convertFile(currentItem, outputFile, exportPreset)

И удалите open for access / close access commands.

Изолированные приложения не любят получать строки пути к командам open / save, но принимают значения alias / POSIX file нормально. (Если это все еще не работает, значит, это другая проблема, но это всегда первое, что нужно проверить, когда вы получаете ошибку разрешений файловой системы, как вы описываете.)

1
foo 13 Мар 2018 в 00:06

Ошибка возникает из-за того, что thisMovie является ссылкой на документ QuickTime Player, и этот класс не может быть преобразован / приведен к file system reference («class fsrf»).

Так написано в сообщении об ошибке

Невозможно преобразовать файл (документ «00000.MTS») в тип «class fsrf»

Команда стандартных дополнений open for access в любом случае не поддерживает документы QuickTime Player. Для чего нужны линии открытия / закрытия?

Заметка:

as Unicode text как принуждение к строке устарело, начиная с macOS 10.5 Leopard. Он используется только с командами read и write для обработки текста в кодировке UTF16. Принуждение к стандартному тексту AppleScript просто записывается as text. В случае name of currentItem он в любом случае избыточен, потому что класс name всегда равен text.

0
vadian 12 Мар 2018 в 18:05