I know very little about bash scripting or Terminal commands, this is all very new to me so please bear with me.
Original script
I would like to use a script I found on littlefield.info as an automator service. This is the original script:
for file in *.flv *.mov *.mp4
do mediainfo "--Inform=Video;%Duration%" $file
done | awk '{total+=$0}END{total=total/1000}END{print strftime("%H:%M:%S",total,1)}'
Explained by the creator:
- Cycle through every video file in a folder,
- Passing it to the mediainfo program to extract the duration in milliseconds,
- Passing that result to the awk program to add up all the numbers to give us a total,
- Passing that to awk again to divide that number by 1000 to give the number of seconds,
- Passing that that to the strftime function to display the result in Hours:Minutes:Seconds format.
Modified script
I installed the mediainfo CLI and started experimenting. Apparently strftime
is not available on mac, so I had to look up another way on how to convert the seconds to readable output. I cobbled together the following script (probably horribly inefficient, but hey.. it works):
# the cd is needed for automator
cd "$1"
i=$(for file in *.flv *.mov *.mp4
do 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" > _total_duration.txt
It works perfectly fine in Terminal. But running it as a service from Finder gives the following output:
Total duration of video files in this folder:
0h00m00s
awk variable problem
The duration shouldn't be 0. I started troubleshooting, and reduced the script to the following:
for file in *.flv *.mov *.mp4
do mediainfo "--Inform=Video;%Duration%" $file
done | awk '{total+=$0}END{print total}' > "test_file_awk.txt"
There seems to be a problem with the variable total
in AWK. It doesn't output anything when run from Finder but works correctly from Terminal.
Do you guys have any idea what I'm doing wrong?