Bonjour,
Je travail sur une petit outils permettant d'automatiser de l'encodage de vidéo (il faut dire que l'encodeur 1080p de hybride Panasonic n'est pas très performant...)
Je travail donc avec divers outils externe et piloté par ligne de commande.
La tâche la plus lourdes consiste a transmettre le flux de sortie du 1er EXE vers le flux d'entrée du 2ème.
Voici la commande
ffmpeg -i "C:\myTest\video_test.avi" -vcodec rawvideo -f rawvideo -pix_fmt yuv420p - | x265-64bit-10bit-latest.exe --input - --input-res 720x404 --fps 23.98 "C:\myTest\output_video.hevc"
Je souhaite maintenant visualiser l'état d'avancement depuis mon IHM. J'utilise alors OutputDataReceived mais rien....
Pour moi le problème viens du faite que je lance un CMD avec en argument mes 2 EXE.
OutputDataReceived écoute alors la sortie de CMD.EXE qui lui, ne dit rien....
Vu le contexte (flux vidéo de grosse dimension) je ne peux pas me permettre de lancer le 1er EXE, stocker le flux décodé puis lancer le 2eme EXE.
Est-il possible d'écouter les sorties des sous-process?
Merci,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Process encodeProcess = new Process();
encodeProcess.StartInfo = new ProcessStartInfo();
encodeProcess.StartInfo.WorkingDirectory = @"C:\myTest";
encodeProcess.StartInfo.FileName = "cmd.exe";
encodeProcess.StartInfo.Arguments = "/C \"" + txtEncodeCommand.Text + "\"";
encodeProcess.EnableRaisingEvents = true;
encodeProcess.StartInfo.UseShellExecute = false;
encodeProcess.StartInfo.RedirectStandardOutput = true;
encodeProcess.OutputDataReceived += encodeProcess_OutputDataReceived;
encodeProcess.Start();
encodeProcess.BeginOutputReadLine();
// Ajout de l'info à une ListBox
private void encodeProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
AddText("--DATA--" + e.Data + "--");
}
else
{
AddText("Receive with no data");
}
Application.DoEvents();
} |
Partager