Use yet another pattern and it will be a different index within $matches:
preg_match('/Duration:\s+(\d{1,2}:)([\d:]*)(\.)*/', $duration, $matches);
$duration = $matches[2];
Keep in mind that I'm assuming the hours place will always be there with that pattern. If it's ever missing then the pattern will be grabbing the minutes in $matches[1].
You might also want to check and see if the hours spot is greater than zero -- just in case it's a long video.
preg_match('/Duration:\s+(\d{1,2}):([\d:]*)(\.)*/', $duration, $matches);
if (intval($matches[1]) > 0) {
$duration = $matches[1] . ':' . $matches[2];
} else {
$duration = $matches[2];
}
PS: Do you know of any open source software that runs on linux and can convert videos to ProRes?