C# Prozess mit Argumenten aufrufen funktioniert nicht

Matzegr

Commander
🎅Rätsel-Elite ’24
Registriert
Jan. 2011
Beiträge
2.633
Hallo,

erstmal vorweg ich hab keine Ahnung (gestern damit angefangen) von C# (MS Visual C# 2010 Express) und nun folgendes Problem:

Ziel ne kleine GUI um WindowsMediaCenter-Dateien (*.wtv/*.sbf) mit mehreren Audiospuren mittels ffmpeg in einen TS-Container für die Weiterverarbeitung (Werbung raus schneiten mittels Avidemux) zu packen.

Wenn die Audiospuren bekannt sind kein Problem mit folgenden Code:
Code:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"R:\ffmpeg.exe";
proc.StartInfo.Arguments = "-i \"" + Datei + "\" -vcodec copy -map v:0 -acodec copy -map a:0 -map a:1 -f mpegts \"" + Datei + ".ts" + "\"";
proc.Start();
proc.WaitForExit();
proc.Close();

Jetzt möcht ich aber voher mittels ffprobe den jeweiligen Index/Codec/Sprach-Tag der Audiostreams auslesen. Um die Reihenfolge bzw. Codec wählen zu können (ProSieben sendet z.B. einen mp2 und einen AC3 Audiostream, brauch ich ja nicht beides.)

Code dazu in einer normalen .bat:

Code:
"R:\ffprobe" "r:\aw1.sbf" -show_streams -select_streams a -report -print_format csv > out.txt

als Log liefert mir ffprobe dann u.A. folgendes:

Command line:
"R:\\ffprobe" "r:\\aw1.sbf" -show_streams -select_streams a -report -print_format csv

und ich erhalte meine gewollte Datei mit den Infos.


Pack ich das nun in mein C# Programm funktioniert es nicht:

Code:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"R:\ffprobe.exe";
proc.StartInfo.Arguments = "\"" + Datei + "\"" +" -show_streams -select_streams a -report -print_format csv > out.txt";
proc.Start();
proc.WaitForExit();
proc.Close();

Ergibt laut ffprobe log folgenden Fehler:

Argument '>' provided as input filename, but 'R:\aw1.sbf' was already specified.

und

Command line:
"R:\\ffprobe.exe" "R:\\aw1.sbf" -show_streams -select_streams a -report -print_format csv ">" out.txt

Der Unterschied: Nutze ich die Bat-Datei erscheint das
nicht im log und alles funktioniert beim C#-Programm erscheint das Argument als
im log und ich erhalten den Fehler.

Kann man da was machen, dass dieses "> out.txt" genauso wie beim Ausführen der bat-Datei übergeben wird?

Als aktuellen Workaround erstell ich einfach eine bat und führe diese als Prozess aus, aber es wäre halt schön wenn es auch ohne den Umweg gehen würde.
 
Perfekt, Dankeschön!
Process.StandardOutput funktioniert wunderbar.
 

Ähnliche Themen

Zurück
Oben