Laden...

Process.Start ffmpeg.exe wird nicht beendet

Erstellt von Stanicher vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.313 Views
S
Stanicher Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren
Process.Start ffmpeg.exe wird nicht beendet

Hallo an alle,

ich versuche mit ffmpeg.exe eine mp3 Datei zu normalisieren.

Ich rufe den Prozess folgendermaßen auf:

ProcessStartInfo norm_first = new ProcessStartInfo
                {
                    CreateNoWindow = false,
                    UseShellExecute = false,
                    RedirectStandardOutput = false,
                    FileName = Environment.CurrentDirectory + "\\ffmpeg\\ffmpeg.exe",
                    WorkingDirectory = Environment.CurrentDirectory,                    
                    Arguments = "  -i "+"\"" + Path.GetTempPath() +   dl_element.titel + ".mp3"+"\""+ " -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48k -ab " +Get_Bitrate()+" \""+ Properties.Settings.Default.dir_audio+"\\"+dl_element.titel+".mp3\"",
                    RedirectStandardError = false
                };

                try
                {
                    Process process = Process.Start(norm_first);
                    
                    process.WaitForExit();
                    

                }

Der Prozess startet und wird auch korrekt beendet, solange ich UseShellExecute= true verwende.

Wenn ich nun UseShellExecute = false verwende, wird der Prozess gestartet, auch die Datei wird erstellt, dann aber bleibt der Prozess ohne irgendwelche Meldungen mit 0% Prozessorauslastung im Taskmanager stehen.
Die erstellte Datei ist auch gesperrt und hat angeblich nur 4kb, kann aber abgespielt werden.
Scheinbar verhindert irgendetwas, dass der Prozess abgeschlossen wird.

Da das Programm mehrere Dateien verarbeiten soll, wäre es nicht schön, wenn für jede Datei ein Fenster geöffnet würde.

Schon einmal vielen Dank für die Mühe und allen einen schönen Tag.

16.828 Beiträge seit 2008
vor 5 Jahren

Schon überprüft, ob ffmpeg Deine Anforderung mit Shell-less überhaupt unterstützt?
Hab ich so meine Zweifel...

S
Stanicher Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren

Vielen Dank für die schnelle Antwort.

Ich werde es Morgen früh prüfen.

Ich habe bereits eine wav in eine mp3 umgewandelt, da ging es auch ohne Fenster. Ich bin davon ausgegangen, dass es auch hier funktioniert. Benutze ja in beiden Fällen die ffmpeg.exe.

Da hatte ich das Problem, dass er hängen blieb weil die Zieldatei schon vorhanden war, und er auf eine Eingabe wartete, ob ich die Datei überschreiben will. Das war dann auch in der Kommandozeile zu sehen.

16.828 Beiträge seit 2008
vor 5 Jahren

Ich bin sicher, dass Du in der Dokumentation von ffmpeg findest, welche Parameter Du für Shell brauchst - oder ob es überhaupt funktioniert.

S
Stanicher Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren

Guten Morgen an alle,
ich kontte mein Problem lösen.
Der Fehler lag darin, dass die Normaliesierung mit ffmpeg.exe auf STDERR zu viel output erzeugte
und dadurch die Pipe voll war.

Habe die Pipe nun folgendermaßen ausgelesen:

ProcessStartInfo norm_first = new ProcessStartInfo
                {
                    CreateNoWindow = true,
                    UseShellExecute = false,
                    RedirectStandardOutput = false,
                    FileName = Environment.CurrentDirectory + "\\ffmpeg\\ffmpeg.exe",
                    WorkingDirectory = Environment.CurrentDirectory,
                    Arguments = "  -i "+"\"" + Path.GetTempPath() +   dl_element.titel + ".mp3"+"\""+ " -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48k -ab " +Get_Bitrate()+" \""+ Properties.Settings.Default.dir_audio+"\\"+dl_element.titel+".mp3\"",
                    RedirectStandardError = true
                };
                

                try
                {
                    Process process = Process.Start(norm_first);
                    StreamReader reader = process.StandardError;
                    string output = reader.ReadToEnd();
                   
                    process.WaitForExit();

                }

Die Umwandlung hat offenbar funktionert, weil weniger Daten zusammen kamen.

Nochmals vielen Dank an Abt. 👍

Wünsche allen einen schönen Tag.