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