【问题标题】:Automating encoding of videos (and creation of reference movie) for iOS为 iOS 自动编码视频(以及创建参考电影)
【发布时间】:2012-07-23 15:49:31
【问题描述】:

我的 iPad 应用让用户能够观看数百个视频。目前,iPad 应用程序将它们指向一个 MP4 文件。但是,我想将它们指向 QuickTime 参考电影。 (如果用户通过 3G 与 wifi 连接,这允许应用发送较低比特率版本的视频。)

现在,我通过转到文件 -> 导出到 Web 在 QuickTime 中创建各种版本以及参考文件。然而,这个过程 (1) 只允许我一次处理一个文件,并且 (2) 会生成许多无用的东西,例如 HTML 和 JavaScript。

如何实现流程自动化?有谁知道现有的脚本/工具来完成这项工作?我敢肯定其他开发者以前也必须这样做。

【问题讨论】:

    标签: ios video encoding quicktime


    【解决方案1】:

    我编写(并从网络上的其他东西拼凑而成)这个 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
    

    假设:

    • 您开始的文件夹只有电影文件,并且您想要转换所有这些文件。
    • 您已经在 QuickTime 中设置了所需的任何导出设置,方法是手动导出到网络

    它会一次导出一个。如果你想同时转换多个,修改startedExporting方法只检查一个文件夹而不是.mov文件(.mov文件是最后一个生成的。)

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多