I record a ton of videos on iPhone app programming, and I didn't have a good way to get the total time for a course from a set of videos.
I previously used VLC, but that gets out of hand when you have 30+ videos to manually calculate total duration.
I wrote a script in Python, since the mdls command didn't seem to work in Swift. Maybe next time it'll be Swift.
Run this code in Terminal and it'll calculate the lengths of all the .mp4 videos and output them to the console. It doesn't work with other video types, but you can grab the code and tweak it. I export all my videos with handbrake (normal settings), which gives me .mp4 video files that are small.
As of now, I have 101 videos from the first 14 days of my Swift iPhone programming course. Using this script I have a total of 12 hours 32 minutes of content.
Run the code
Open Terminal on Mac using Spotlight (Command + Spacebar) > type Terminal > Press enter
python VideoDurationCalculator.py /path/to/your/video/folder
python VideoDurationCalculator.py /Users/Shared/Course\ Videos/1\ -\ Swift\ in\ 31\ Days/Swift1\ -\ Export\ 1080
import os import commands import sys # Paul Solt - get the length of all videos within a folder (recursive) # # Depending on the number of files/folders, it can take time to complete #(100 files ~2.018 seconds to run) # Set your video folder path here defaultPath = "/Users/Shared/Course Videos/1 - Swift in 31 Days/Swift1 - Handbrake 1080" def main(): path = defaultPath if len(sys.argv) == 2: path = sys.argv else: print "Notice: Using default path:", defaultPath, "\n" #test path if os.path.exists(path): # Grab all the video (.mp4) files recursively for a folder filenames =  for root, dirs, files in os.walk(path): for file in files: if file.endswith(".mp4"): filenames.append(os.path.join(root, file)) #Calculate the total time of all videos in folder totalTimeInSeconds = 0 print "Calculating video lengths..." for file in filenames: # Calculate total time lengthInSeconds = videoLength(file) totalTimeInSeconds += lengthInSeconds hours = int(totalTimeInSeconds / 3600) minutes = int((totalTimeInSeconds - (hours * 3600)) / 60) print "hours:", hours, "Minutes:", minutes else: print "Error: No folder found with path:", path # Parse the plist format from mdls command on Terminal # @return the time in seconds # mdls -plist - filename.mp4 def videoLength(filename): myCommand = "mdls -plist - " myCommand = myCommand + "\"" + filename + "\"" status, plistInput = commands.getstatusoutput(myCommand) videoLength = 0 searchTerm = "<key data-preserve-html-node="true">kMDItemDurationSeconds</key>" # 1. find "<key data-preserve-html-node="true">kMDItemDurationSeconds</key>" # 2. grab text until next </real> realStart = "<real data-preserve-html-node="true">" realEnd = "</real>" index = plistInput.find(searchTerm) # Offset by length of search term startIndex = index + len(searchTerm) # Calculate new start/end positions startIndex = plistInput.find(realStart, startIndex) endIndex = plistInput.find(realEnd, startIndex) #offset start by length of realStart text startIndex += len(realStart) if startIndex != -1 and endIndex != -1: #Split and parse as number numberString = plistInput[startIndex:endIndex] numberString = numberString.strip() videoLength = float(numberString) else: print return videoLength # Run the main method main()