.
Anmeldung | Registrieren | Hilfe
in Suchen

ffmpeg.exe StandardOutput

Letzter Beitrag 07. Sep 2010 18:39 von DEX. 6 Antworten.
Seite 1 von 1 (7 Treffer)
Beiträge sortieren: Zurück Weiter
  • 05. Sep 2010 18:25

    • DEX
    • Top 150 Mitwirkender
    • Registriert am 19. Aug 2010
    • Beiträge 9
    • Punkte 90

    ffmpeg.exe StandardOutput

    Hi hab da ein kleines Problem möchte ein Video Konvertieren mit der ffmpeg.exe
    das klappt auch
    so ist der Code im moment

                string dir = "C:\\Users\\DEX\\Desktop\\FFmpeg-0.6-svn-23607\\bin\\";
                string datei = dir + "ffmpeg.exe";
                string args = "-i " + dir + "video.mp4 -b 500kb -ab 128k -y " + dir + "video.avi";
    
                Process convert = new Process();
                convert.StartInfo.RedirectStandardOutput = true;
                convert.StartInfo.UseShellExecute = false;
                //convert.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                //convert.StartInfo.CreateNoWindow = true;
                convert.StartInfo.FileName = datei;
                convert.StartInfo.Arguments = args;
                convert.Start();
    
                textBox1.Text = convert.StandardOutput.ReadLine();
                convert.WaitForExit();


    ich möchte jetzt den Inhalt der Konsolenanwendung auslesen wie zusehen ist in der textBox1
    um später eine progressBar zu nutzen
    wenn RedirectStandardOutput an ist bleibt die Konsole und die textBox leer
    außerdem bleibt die Form bis die Umwandelung des Videos fertig ist hängen
    ist RedirectStandardOutput aus so geht die Konsole aber die textBox bleibt leer

    kann mir einer bei diesem Problem helfen
    oder kennt jemand eine bessere Möglichkeit flv zu avi/mp4/mp3/wmv  mp4 zu avi/mp3/wmv umzuwandeln?
    • IP-Adresse ist Registriert
  • 06. Sep 2010 13:31 Antwort zu

    • Timo Rehl
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05. Mai 2009
    • Wald-Michelbach
    • Beiträge 591
    • Punkte 10.110
    • Moderator

    ffmpeg.exe StandardOutput

    Hallo DEX,

    das was Du machst ist soweit (fast) richtig. Das Problem ist, dass Du in Deiner Forms Anwendung das "convert.WaitForExit" aufrufst. Damit blockiert nicht nur das GUI, sondern es kommen auch keine Veränderungen (Text in der Textbox) mehr an.

    Lagere die ganzen Codezeilen in einen separaten Thread (am Besten  einen BackgroundWorkerProcess) aus, und dann wird das auch funktionieren.

    Ich habe jetzt leider nicht mehr Zeit genauer auf das Thema einzugehen. Schau mal wie weit Du mit meinen Informationen kommst, und frag bei Schwierigkeiten nach.

    Grüße
    Timo

    - theres no place like 127.0.0.1 -
    • IP-Adresse ist Registriert
  • 06. Sep 2010 15:50 Antwort zu

    • DEX
    • Top 150 Mitwirkender
    • Registriert am 19. Aug 2010
    • Beiträge 9
    • Punkte 90

    ffmpeg.exe StandardOutput

    hmm das mit dem BackgroundWorkerProcess verstehe ich nicht so sieht es jetzt aus

           public void converter(string orginal, string to)
            {
                string dir = "C:\\Users\\DEX\\Desktop\\FFmpeg-0.6-svn-23607\\bin\\";
                string datei = dir + "ffmpeg.exe";
                string args = "-i " + dir + orginal + " -b 500kb -ab 128k -y " + dir + to;
    
                Process convert = new Process();
                convert.StartInfo.RedirectStandardOutput = true;
                convert.StartInfo.UseShellExecute = false;
                //convert.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                //convert.StartInfo.CreateNoWindow = true;
                convert.StartInfo.FileName = datei;
                convert.StartInfo.Arguments = args;
                convert.Start();
    
                textBox1.Text = convert.StandardOutput.ReadLine();
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                converter("video.mp4", "video.avi");
            }



    convert.WaitForExit ist raus bleibt aber trotzdem hängen


    • IP-Adresse ist Registriert
  • 06. Sep 2010 23:18 Antwort zu

    • DEX
    • Top 150 Mitwirkender
    • Registriert am 19. Aug 2010
    • Beiträge 9
    • Punkte 90

    ffmpeg.exe StandardOutput

    OK habe jetzt verstanden wie BackgroundWorkerProcess geht
    bleibt auch nicht mehr hängen
    aber irgendwie bleibt die textBox immer noch leer egal was ich versuche

    aktueller Code:


            public Form1()
            {
                InitializeComponent();
                CheckForIllegalCrossThreadCalls = false;
            }
    
            public void converter(string orginal, string to)
            {
                string dir = "C:\\Users\\DEX\\Desktop\\FFmpeg-0.6-svn-23607\\bin\\";
                string datei = dir + "ffmpeg.exe";
                string args = "-i " + dir + orginal + " -b 500kb -ab 128k -y " + dir + to;
    
                Process convert = new Process();
                convert.StartInfo.RedirectStandardOutput = true;
                convert.StartInfo.UseShellExecute = false;
                //convert.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                //convert.StartInfo.CreateNoWindow = true;
                convert.StartInfo.FileName = datei;
                convert.StartInfo.Arguments = args;
                convert.Start();
    
    
                StreamReader myStreamReader = convert.StandardOutput;
    
                while (myStreamReader.Peek() >= 0)
                {
                    string result = myStreamReader.ReadLine();
                    textBox1.Text = textBox1.Text + result;
                } 
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                backgroundWorker1.RunWorkerAsync(); 
            }
    
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                converter("video.mp4", "video.avi");
            }

    • IP-Adresse ist Registriert
  • 07. Sep 2010 8:10 Antwort zu

    • Timo Rehl
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05. Mai 2009
    • Wald-Michelbach
    • Beiträge 591
    • Punkte 10.110
    • Moderator

    ffmpeg.exe StandardOutput

    Hallo DEX,

    hey super hast Du das hinbekommen mit dem Backgroundworker! Und jetzt wo Du das als Hintergrundprozess hast, musst Du natürlich auch wieder das "Wait" einbauen ;-)

    Sorry, falls Du vermutet hast, dass das verkehrt sei. Das Wait ist schon richtig, nur darf es die GUI nicht blockieren. Mit dem BackgroundWorker ist dasentkoppelt, und dann darf/muss er auch warten.

    Grüße
    Timo

    - theres no place like 127.0.0.1 -
    • IP-Adresse ist Registriert
  • 07. Sep 2010 11:21 Antwort zu

    • DEX
    • Top 150 Mitwirkender
    • Registriert am 19. Aug 2010
    • Beiträge 9
    • Punkte 90

    ffmpeg.exe StandardOutput

    Es existiert weiterhin leider keine Ausgabe in den StandardOutput Tongue Tied
    • IP-Adresse ist Registriert
  • 07. Sep 2010 18:39 Antwort zu

    • DEX
    • Top 150 Mitwirkender
    • Registriert am 19. Aug 2010
    • Beiträge 9
    • Punkte 90

    ffmpeg.exe StandardOutput

    Antworten
    ahhha kein wunder mit der ffmpeg.exe geht es nur mit StandardError
    trotzdem vielen danke für deine Hilfe
    also für die anderen

    Code der geht:

            public Form1()
            {
                InitializeComponent();
                CheckForIllegalCrossThreadCalls = false;
            }
    
    
    
            public void converter(string orginal, string to)
            {
                string dir = "C:\\Users\\DEX\\Desktop\\FFmpeg-0.6-svn-23607\\bin\\";
                string datei = dir + "ffmpeg.exe";
                string args = "-i " + dir + orginal + " -b 500kb -ab 128k -y " + dir + to;
    
                Process convert = new Process();
                convert.StartInfo.RedirectStandardError = true;
                convert.StartInfo.UseShellExecute = false;
                //convert.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                //convert.StartInfo.CreateNoWindow = true;
                convert.StartInfo.FileName = datei;
                convert.StartInfo.Arguments = args;
                convert.Start();
    
    
                StreamReader myStreamReader = convert.StandardError;
    
                while (myStreamReader.Peek() >= 0)
                {
                    string result = myStreamReader.ReadLine();
                    textBox1.Text = result;
                }
    
                convert.WaitForExit();
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                backgroundWorker1.RunWorkerAsync();
            }
    
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                converter("video.mp4", "video.avi");
            }

    • IP-Adresse ist Registriert
Seite 1 von 1 (7 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum