- 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:
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:
als Log liefert mir ffprobe dann u.A. folgendes:
und ich erhalte meine gewollte Datei mit den Infos.
Pack ich das nun in mein C# Programm funktioniert es nicht:
Ergibt laut ffprobe log folgenden Fehler:
und
Der Unterschied: Nutze ich die Bat-Datei erscheint das
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.
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> out.txt
im log und ich erhalten den Fehler.">" out.txt
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.