I have a media center setup at home that automatically downloads and passes files to handbrakeCLI. I have a batch automator workflow i downloaded that will batch encode files if they are all in the folder when the script runs. In this case, they will be converted one at a time. Otherwise, i use another workflow that will parse the files one at a time but if there are multiple files they will all start-up separate instances of handbrakeCLI.
This is fine but I do not want to run more than 3 instances at one time. I am trying to devise a script that will count the number of handbrakeCLI instances running and not start the automator script to encode the file until another instance finishes.
One of the problems with HandbrakeCLI is that it is not reported by system events as a process so i was using the following shell command from applescript to list all the running processes.
do shell script "/bin/ps -ax
Then i found that i could combine this with grep and do something like this:
set processCount to do shell script "/bin/ps -ax | grep -c HandBrakeCLI" if processCount = >3 then activate application "Encode_Files" else error number -128 end if
But this has not worked reliably. If i just run the
do shell script "/bin/ps -ax | grep -c HandBrakeCLI"
it returns values of 2 with no handbrakeCLI running. For some reason its identifying 2 instances. Not sure why this is. But then if i just assume this to be the case and change my process count to 5 (2 + 3 instances) it does not work reliably either. Sometimes the script will work and only 3 instances start other times 4 instances start or even 5. Also, my handbrake automator script lables the files in green when it starts processing them so as not to try and process them.
Here is my entire script which I run as an embedded applescript inside Hazel (and hence the references to “theFile” which is how Hazel identifies the file to act on).
try set processCount to do shell script "/bin/ps -ax | grep -c HandBrakeCLI" set origFilepath to quoted form of POSIX path of (theFile as alias) set shellCommand to "automator -i " & origFilepath & " '/Users/bmorgan/Library/Services/Batch Rip ¢ Batch Encode (Finder)(TV).workflow' ;" delay 5 tell application "Finder" if label index of theFile = 6 then error number -128 else if processCount > "3" then error number -128 else do shell script shellCommand end if end tell end try
Again script runs fine just doesnt obey the process arguments. Anyone have any idea why this is happening above and how to better fix it?