Why does this bash script not work as an automator service?
Let's start with a small example.

Fire up Automator and create a service with a single "Run Shell Script" step.

Set it to take Folders as input from Finder

Pass input as arguments. Shell is /bin/bash

Bash code:

cd "$@"

for file in *.mov *.flk *.mp4
    do
    ls -1 "$file" &gt;&gt; ~/Desktop/test_file_awk.txt
done


What this does it takes the directory you pass in as "$@" and goes into it then runs the command on all the files in that directory.

"$@" is in quotes to protect against spaces, as is "$file"

So, you can replicate this to your setup:

cd "$@"
i=$(for file in {*.flv,*.mov,*.mp4,*.m4v}
    do 
    /usr/local/bin/mediainfo "--Inform=Video;%Duration%" "$file"
done | awk '{total+=$0}END{print total}')

((i/=1000, sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%dh%02dm%02ds" $hrs $min $sec)
echo -e "Total duration of video files in this folder:\n\n$timestamp" &gt; _total_duration.txt


Personally, I would change the output to something like:

&gt; ~/Desktop/"$@"_total_duration.txt


So that the data ends up on  your desktop in a file named for the folder, but I have a lot of media directories and I don't want txt files in them.