Einzelnen Beitrag anzeigen

Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#2

AW: Externe Programme asynchron trotz WaitForSingleObject?

  Alt 18. Mai 2017, 14:50
GetConsoleoutput ist hier im Forum öfter erwähnt bzw. gepostet worden:
http://www.delphipraxis.net/164364-d...-einlesen.html
Deshalb hatte ich auf das Posten des Codes verzichtet.
WaitForSingleObject(ProcessInfo.hProcess, INFINITE) signalisiert offenbar das Beenden von ffmpeg, bevor der eigentliche Kopiervorgang ('-acodec copy') überhaupt begonnen hat.

Für Testzwecke habe habe ich die Warteschleife erweitert und lasse eine Variable hochzählen und, falls > 0, im Logfile eine entsprechende Meldung hinterlegen:
Delphi-Quellcode:
const ffmpg:= '"D:\Externals\ffmpeg\ffmpeg.exe" -loglevel error -i ';


procedure TGLMainform.Anonymize(const sourcefile,cleanfile:string);
  var tempfile: string;
      loopcount: Integer;
begin
  tempfile:= changefileext(cleanfile,'.aac');
  cmdexec(ffmpg + #34 + sourcefile + #34 + ' -acodec copy ' + #34 + tempfile + #34); // Audiostream extrahieren
  cmdexec(ffmpg + #34 + tempfile + #34 + ' -absf aac_adtstoasc -acodec copy ' + #34 + cleanfile + #34); // Audiostream in leeren MP4 Container
  loopcount:= 0;
  While not Fileexists(cleanfile) do // Kopiervorgang tempfile > cleanfile abgeschlossen?
  begin
    sleep(100);
    inc(loopcount);
  end;
  sysutils.DeleteFile(tempfile);
  If loopcount > 0 Then Loglist.add('Durchläufe Warteschleife: ' + inttostr(loopcount));
end;
Bisher wurde noch kein einziges Mal ein Wert > 0 gemeldet, aber das kann, wie schon gesagt, günstigen Umständen geschuldet sein.
Ich suche nach wie vor nach einer 'sauberen' und zuverlässigen Lösung

Geändert von Maekkelrajter (18. Mai 2017 um 15:07 Uhr)
  Mit Zitat antworten Zitat