0

私の iPad アプリでは、ユーザーは数百本のビデオを見ることができます。現在、iPad アプリは MP4 ファイルを指しています。ただし、代わりに QuickTime リファレンス ムービーを紹介したいと思います。(これにより、ユーザーが Wi-Fi ではなく 3G 経由で接続している場合、アプリはビデオのビットレートが低いバージョンを送信できます。)

現在、QuickTime で [ファイル] -> [Web にエクスポート] を選択して、さまざまなバージョンと参照ファイルを作成しています。ただし、このプロセスでは (1) 一度に 1 つのファイルしか実行できず、(2) HTML や JavaScript などの役に立たないものが大量に生成されます。

プロセスを自動化するにはどうすればよいですか? この作業を行うための既存のスクリプト/ツールを知っている人はいますか? 他の開発者が以前にそれをしなければならなかったと確信しています。

4

1 に答える 1

0

私は次の AppleScript を作成して (そして Web 上の他のものをまとめて)、この AppleScript を作成しました。

--property exportFolder : (path to documents folder as Unicode text) & "Your Folder:"
property QTExportPath : (path to movies folder from user domain)
property completedFolderName : "completion" -- this folder must already exist
property referenceFiles : {}
property encodeCount : 0

on run
    choose folder with prompt "Choose folder with video files:" -- with multiple selections allowed
    open (result)
end run

on open droppedItems

    tell application "Finder"
        set allFiles to every file of entire contents of droppedItems as alias list
    end tell

    -- Error checking
    repeat with testFile in allFiles

        set myChars to characters of basename(testFile)

        if count_matches(myChars, ".") > 1 then
            display dialog "ERROR: The file " & basename(testFile) & " has too many periods."
            return
        end if

    end repeat

    -- Made it past error checking, let's get started

    tell application "QuickTime Player"
        activate
        close every window
    end tell

    repeat with thisItem in allFiles

        tell application "QuickTime Player"
            close every window

            open thisItem as alias

        end tell

        activate application "QuickTime Player"
        tell application "System Events"
            tell process "QuickTime Player"
                keystroke "E" using command down
                repeat until exists sheet 1 of window 1
                    delay 0.2
                end repeat
                click button "Export" of sheet 1 of window 1
            end tell
        end tell

        tell application "Finder"
            set fileExt to name extension of thisItem
        end tell

        set fileBaseName to basename(thisItem)

        set lengthWithoutExtension to (count of fileBaseName) - (count of fileExt) - 1

        set fileBaseNameWithoutExtension to text 1 thru lengthWithoutExtension of fileBaseName

        set end of referenceFiles to fileBaseNameWithoutExtension

        repeat until startedExporting(fileBaseNameWithoutExtension)

            -- wait for this file to start exporting before beginning another

        end repeat


    end repeat

    repeat until doneExporting(referenceFiles)

        -- wait for exporting to finish

    end repeat

    cleanUpGarbage(referenceFiles)

    tell application "QuickTime Player"
        activate
        close every window
        quit
    end tell

    display alert "finished exporting"

end open

on basename(thePath) -- Returns basename of alias

    set thePOSIXPath to the POSIX path of thePath

    if thePOSIXPath ends with "/" then
        set nameIndex to -2
    else
        set nameIndex to -1
    end if

    set ASTID to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "/"
    set thePOSIXPath to text item nameIndex of thePOSIXPath
    set AppleScript's text item delimiters to ASTID
    return thePOSIXPath
end basename

on startedExporting(fileBaseNameWithoutExtension) -- Checks if QuickTime began exporting a file

    set moviesPath to QTExportPath as text
    set fileToTest to ((the POSIX path of moviesPath) & fileBaseNameWithoutExtension & "/Resources/" & fileBaseNameWithoutExtension & ".mov")
    if FileExists(fileToTest) then
        -- do nothing
    else
        return false
    end if

end startedExporting

on doneExporting(referenceFiles) -- Checks if QuickTime is done exporting everything

    set moviesPath to QTExportPath as text
    repeat with thisItem in referenceFiles
        set fileToTest to ((the POSIX path of moviesPath) & thisItem & "/Resources/" & thisItem & ".mov")
        if FileExists(fileToTest) then
            -- do nothing
        else
            return false
        end if
    end repeat
end doneExporting

on FileExists(theFile) -- (String) as Boolean
    tell application "System Events"
        if exists file theFile then
            return true
        else
            if exists folder theFile then
                return true
            else
                return false
            end if
        end if
    end tell
end FileExists

on cleanUpGarbage(referenceFiles)

    set moviesPath to QTExportPath as text
    set donePath to (QTExportPath as text) & completedFolderName as text
    set POSIXMovies to the POSIX path of moviesPath
    set POSIXDone to the POSIX path of donePath

    repeat with thisItem in referenceFiles
        set directoryToClean to (POSIXMovies & thisItem & "/")
        set m4vcommand to "find '" & directoryToClean & "' -type f -iname '*m4v' -exec cp -n {} '" & POSIXDone & "' \\;"
        set movcommand to "find '" & directoryToClean & "' -type f -iname '*mov' -exec cp -n {} '" & POSIXDone & "' \\;"


        do shell script m4vcommand
        do shell script movcommand

        set thefolder to POSIX file directoryToClean

        tell application "Finder"
            delete thefolder
        end tell

    end repeat
end cleanUpGarbage

on count_matches(this_list, this_item)
    set the match_counter to 0
    repeat with i from 1 to the count of this_list
        if item i of this_list is this_item then ¬
            set the match_counter to the match_counter + 1
    end repeat
    return the match_counter
end count_matches

以下を前提としています。

  • 開始元のフォルダーにはムービー ファイルのみがあり、それらすべてを変換したい場合。
  • Web への手動エクスポートを 1 回実行することで、QuickTime で必要なエクスポート設定を既にセットアップしている

一度に 1 つずつエクスポートされます。複数を同時に変換する場合 startedExportingは、.mov ファイルではなくフォルダーのみをチェックするようにメソッドを変更します (.mov ファイルは最後に生成されます)。

于 2012-08-01T21:07:15.493 に答える