OK, so I solved the issues myself. Here is some code that will read most meta data from mp4 video files (tagged with Subler/iTunes or the like). You may want to edit the split() parts, since the code below is tailored to split according to the non-standard way that I tag my files.
Maybe someone will find this useful 
#MTI, April 2012<br />
<br />
import os, plistlib<br />
from mutagen.mp4 import MP4<br />
<br />
class M4Vmovietags(Agent.Movies):<br />
name = 'M4V Movietags'<br />
languages = [Locale.Language.NoLanguage]<br />
primary_provider = False<br />
contributes_to = ['com.plexapp.agents.imdb', 'com.plexapp.agents.none']<br />
<br />
def search(self, results, media, lang):<br />
results.Append(MetadataSearchResult(id = 'null', score = 100))<br />
<br />
def update(self, metadata, media, lang):<br />
if media and metadata.title is None: metadata.title = media.title<br />
<br />
for i in media.items:<br />
for part in i.parts:<br />
getMetadataAtoms(part, metadata)<br />
<br />
def getMetadataAtoms(part, metadata):<br />
tags = MP4(part.file.decode('utf-8'))<br />
<br />
#Coverart<br />
try:<br />
metadata.posters['atom'] = Proxy.Media(str(tags["covr"][0]))<br />
except: pass<br />
<br />
#Title from name atom<br />
try:<br />
title = tags["\xa9nam"][0]<br />
Log("Title: " + title)<br />
metadata.title = title<br />
except: pass<br />
<br />
#Collection from album atom<br />
try:<br />
album = tags["\xa9alb"][0]<br />
if len(album) > 0:<br />
albumList = album.split('/')<br />
metadata.collections.clear()<br />
for a in albumList:<br />
metadata.collections.add(a.strip())<br />
except: pass<br />
<br />
#Summary from long/short decription atom<br />
try:<br />
try:<br />
summary = tags["ldes"][0]<br />
except:<br />
summary = tags["desc"][0]<br />
metadata.summary = summary<br />
except: pass<br />
<br />
#Genres from genre atom<br />
try:<br />
genres = tags["\xa9gen"][0]<br />
if len(genres) > 0:<br />
genList = genres.split('/')<br />
metadata.genres.clear()<br />
for g in genList:<br />
metadata.genres.add(g.strip())<br />
except: pass<br />
<br />
#Studio from copyright atom<br />
try:<br />
copyright = tags["cprt"][0]<br />
if len(copyright) > 0:<br />
metadata.studio = copyright<br />
except: pass<br />
<br />
#Directors from the iTunMOVI-directors atom<br />
try:<br />
pl = plistlib.readPlistFromString(str(tags["----:com.apple.iTunes:iTunMOVI"][0]))<br />
directors = pl["directors"][0]["name"]<br />
if len(directors) > 0:<br />
dirList = directors.split("/")<br />
metadata.directors.clear()<br />
for d in dirList:<br />
metadata.directors.add(d.strip())<br />
except: pass<br />
<br />
#Writers from the iTunMOVI-screenwriters atom<br />
try:<br />
pl = plistlib.readPlistFromString(str(tags["----:com.apple.iTunes:iTunMOVI"][0]))<br />
writers = pl["screenwriters"][0]["name"]<br />
if len(directors) > 0:<br />
wriList = writers.split("/")<br />
metadata.writers.clear()<br />
for w in wriList:<br />
metadata.writers.add(w.strip())<br />
except: pass<br />
<br />
#Content rating from iTunEXTC atom<br />
try:<br />
rating = tags["----:com.apple.iTunes:iTunEXTC"][0].split('|')[1]<br />
if len(rating) > 0:<br />
metadata.content_rating = rating<br />
except: pass<br />
<br />
#Roles from artist atom<br />
try:<br />
artists = tags["\xa9ART"][0].split('/')<br />
metadata.roles.clear()<br />
for a in artists:<br />
role = metadata.roles.new()<br />
role.actor = a.split(' ')[0]<br />
role.role = a.split(' ')[1].strip('()')<br />
except: pass<br />
<br />
#Release date from year atom<br />
try:<br />
releaseDate = tags["\xa9day"][0]<br />
releaseDate = releaseDate.split('T')[0]<br />
parsedDate = Datetime.ParseDate(releaseDate)<br />
metadata.year = parsedDate.year<br />
metadata.originally_available_at = parsedDate.date()<br />
except: pass