0

我,使用 Applescript 使用 Handbrake CLI 将一大堆 mv4 文件转换为 640x480。我有一个applescript,我发现某处更改了我的参数,并且效果很好。但为了节省时间,我希望脚本跳过已经是 640x480 的文件,因为并非所有文件都需要转换。我该怎么做呢?

这是脚本:

--on adding folder items to this_folder after receiving these_items
with timeout of (720 * 60) seconds
tell application "Finder"
    --Get all m4v files that have no label color yet, meaning it hasn’t been processed
    set allFiles to every file of entire contents of ("FIRSTHD:Users:jerry:Desktop:Omkodning" as alias) whose ((name extension is "m4v") and label index is 0)
    --Repeat for all files in above folder
    repeat with i from 1 to number of items in allFiles
        set currentFile to (item i of allFiles)
        try
            --Set to gray label to indicate processing
            set label index of currentFile to 7
            --Assemble original and new file paths
            set origFilepath to quoted form of POSIX path of (currentFile as alias)
            set newFilepath to (characters 1 thru -5 of origFilepath as string) & "mp4'"
            --Start the conversion
            set shellCommand to "nice /Applications/HandBrakeCLI -i " & origFilepath & " -o " & newFilepath & " -e ffmpeg4 -b 1200 -a 1 -E faac -B 160 -R 29.97 -f mp4 –crop 0:0:0:0 crf 24 -w 640 -l 480  ;"
            do shell script shellCommand
            --Set the label to green in case file deletion fails
            set label index of currentFile to 6
            --Remove the old file
            set shellCommand to "rm -f " & origFilepath
            do shell script shellCommand
        on error errmsg
            --Set the label to red to indicate failure
            set label index of currentFile to 2
        end try
    end repeat
end tell
end timeout
--end adding folder items to
4

1 回答 1

0

为清楚起见进行了编辑....

HandBreakCLI如果分辨率为 640x480,则没有任何选项告诉它不要转换,因此您必须在脚本中处理该位逻辑。这很容易做到。

所以你的脚本需要做的就是......

get the video file resolution

If file is not at desired resolution then
    convert the file
else
    skip it
end if

因此,正如这里所讨论的,您可以使用免费提供的mediainfo命令行工具来获取视频分辨率。

这是一些您可以复制/粘贴并运行以查看其工作原理的applescript代码...

set filterStr to " | grep pixels | tr -d [:alpha:][:blank:][:punct:]"

set allFiles to (choose file with multiple selections allowed)

repeat with i from 1 to number of items in allFiles
    set currentFile to (item i of allFiles)

    set cmdStr to "/usr/local/bin/mediainfo " & ¬
        quoted form of POSIX path of currentFile & filterStr

    set h to 0
    set w to 0
    try
        set fileInfo to do shell script (cmdStr)
        set {w, h} to every paragraph of fileInfo
    end try

    if w is not 640 and h is not 480 then
        log w & " x " & h

        # Convert to desired resolution....
    end if
end repeat

希望有帮助。

于 2014-07-26T10:38:15.280 回答