Ich habe ein kleines Teilscript, das mittels 'ffprobe' (gehoert zu ffmpeg und gibt Infos/Metadaten ueber jegliches Medien-File aus) ein Quicktime-File analysiert und die gefundenen Werte in nem Dictionary speichert. Das hat bisher am Mac wunderbar funktioniert. Das gleiche Script funktioniert nun unter Windows nicht mehr identisch, was ich einfach nicht verstehe.
ffprobe spuckt folgende Infos bei meinen Beispiel-QTs aus, wenn man es im Terminal mit '-show_streams' aufruft (auf wesentliche Teile reduziert):
sprich fuer jeden im QT enthaltenen Stream so nen [STREAM][/STREAM]-Teil und darin fuer jeden Wert eben eine Zeile.ffprobe version 0.7-rc8
[...]
[STREAM]
index=0
codec_name=dnxhd
codec_long_name=VC3/DNxHD
codec_type=video
[...]
TAG:language=eng
TAG:codec_name=Lavc55.66.100 dnxhd
[/STREAM]
[STREAM]
index=1
codec_name=unknown
codec_type=data
[...]
nb_frames=1
TAG:language=eng
[/STREAM]
holen tu ich mir diesen Output so:
Code: Alles auswählen
cmnd = [ffprobe, '-show_streams', movpath]
p = subprocess.Popen(cmnd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
Code: Alles auswählen
movinfo = {}
for line in out.split('\n'):
if '=' in line:
linekey, linevalue = line.split('=')
movinfo[linekey] = linevalue
if '[/STREAM]' in line and movinfo['codec_type'] == 'video':
break
return(movinfo)
Soweit funktioniert das unter OS X wunderbar. Unter Windows ergibt die Zeile 6 aber leider nicht True nachdem der erste Stream fertig ist, sondern macht einfach weiter und fuellt die gleichen Felder dann mit den Werten aus dem naechsten Stream, die aber falsch sind.
Kann mir irgendjemand erklaeren, warum das so ist bzw. wie ich da drauf kommen koennte? Hat es irgendwas mit unterschiedlichen Zeilenenden zu tun? Ist der Inhalt von 'out' aus dem subprocess unterschiedlich bei verschiedenen Plattformen? Per 'print' angeschaut sind sie gleich, aber das ist ja schon 'schoen gemacht'.
Danke fuer jegliche Ideen, ich versteh es grad einfach ueberhaupt nicht mehr!