问题
Im, using an Applescript to bashconvert a whole bunch of mv4 files to 640x480 using Handbrake CLI. I have a applescript I found somewhere changed to my parameters, and it works great. But to save time, I want the script to skip files that are already 640x480, since not all files need conversion. How would I go about that?
Here´s the script:
--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
回答1:
Edited for clarity....
Since HandBreakCLI
doesn't have any options to tell it not to convert if the resolution is 640x480, you have to handle that bit of logic in your script. It is easily done.
So all your script needs to do is...
get the video file resolution
If file is not at desired resolution then
convert the file
else
skip it
end if
So, as discussed here, you can use the freely available mediainfo
command line tool to get the video resolution.
Here is some applescript code which you can copy/paste and run to see how it works...
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
Hope that helped.
来源:https://stackoverflow.com/questions/24969108/how-to-i-tell-this-applescript-to-skip-some-files