Oppure

Loading
02/06 13:58
Carlo
Avrei bisogno di catturare le info che ffmpeg visualizza su Console, dopo essere stato lanciato da codice C# WinForm.

Allego un progetto con un pulsante [ vai ] che manda in esecuzione ffmpeg per strimmare un file in locale (solo per capire cosa mi serve).

dropbox.com/s/8t8q7dn7scpucw6/…

(si può scaricare senza registrarsi)

Nel progetto è incluso ffmpeg e un file video da 5''. Questo per ricevere aiuti anche da chi non conosce ffmpeg.

Praticamente il programma lancia ffmpeg con:
System.Diagnostics.Process.Start(@"cmd.exe", "/c ffmpeg -re -i test.mp4.....

si apre la finestra CMD e vorrei copiare i messaggi che si susseguono in una listView.

Ho provato con [ vai2 ] (incluso nel progetto):
private void button2_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c ffmpeg -re -i test.mp4 -c:v libx264 -preset veryfast -maxrate 500k -bufsize 1000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv udp://127.0.0.1:23000");

    procStartInfo.RedirectStandardOutput = true;
    procStartInfo.UseShellExecute = false;
    procStartInfo.CreateNoWindow = false;
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo = procStartInfo;
    proc.OutputDataReceived += cmd_DataReceived;
    proc.EnableRaisingEvents = true;
    proc.Start();

    proc.BeginOutputReadLine();
    // string result = proc.StandardOutput.ReadLine(); // errore sincrono asincrono
    // string result = proc.StandardOutput.ReadToEnd(); // errore sincrono asincrono
    // Console.WriteLine(result);
}

public void cmd_DataReceived(object sender, DataReceivedEventArgs e)
{
    Console.WriteLine("dati in arrivo"); // controllo preliminare sull'output di VS
    Console.WriteLine(e.Data);  // controllo preliminare sull'output di VS
}


la console resta nera e l'evento si scatena solo alla fine e comunque non ricevo i dati.
Sulla finestra output di VS i dati compaiono ma solo alla fine del filmato che dura soli 5 secondi, serve solo per provare.

Qualsiasi metodo per intercettare cosa viene mostrato sulla finestra di ffmpeg mi va bene.

Grazie a chiunque si interesserà al problema.
Ultima modifica effettuata da Carlo 02/06 14:22
in programmazione tutto è permesso
02/06 14:43
nessuno
        private void button2_Click(object sender, EventArgs e)
        {
            Process process = new Process();

            process.StartInfo.FileName = "ffmpeg.exe";             
            process.StartInfo.Arguments = "-re -i test.mp4 -c:v libx264 -preset veryfast -maxrate 500k -bufsize 1000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv udp://127.0.0.1:23000";

            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;

            process.StartInfo.RedirectStandardInput = false;    
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;

            process.OutputDataReceived += cmd_DataReceived;
            process.ErrorDataReceived += cmd_DataReceived;
            process.EnableRaisingEvents = true;
            process.Start();

            process.BeginErrorReadLine();
            process.BeginOutputReadLine();

            process.WaitForExit();
        }

        public void cmd_DataReceived(object sender, DataReceivedEventArgs e)
        {
            listBox1.Items.Add(e.Data);
        }




Ciao
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
02/06 17:20
Carlo
@nessuno :k:

Sono senza parole, grazie. :asd:
in programmazione tutto è permesso
02/06 23:03
nessuno
Di nulla, ciao

(naturalmente tu potrai usare una listview, come da titolo, io per il test ho usato una listbox)
Ultima modifica effettuata da nessuno 03/06 16:07
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.