TonysAlwayslost
TonysAlwayslost

Reputation: 33

How do I execute an ffmpeg cmd to command line using C#?

I am having an issuing trying to get a form app on visual studio 19 to execute a cmd on command line for converting a video from mp4 to avi. I am using ffmpeg for this but everytime I compile it wont pick anything up.

I have ran the argument through command line and it converts the video just fine. The path as far as I am aware is correct so I am not sure why the compiler wont pick up on any files.

private void Button1_Click(object sender, EventArgs e)
    {
        string cmdString =  "c:\ffmpeg\bin";
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments =  cmdString + $"-i shatner.mp4 shatner.avi";


        using (Process exeProcess = Process.Start(startInfo))
        {
            exeProcess.WaitForExit();
        }
    }
}

}

The error I am getting: "The system cannot find the specified file"

Also I would have put a try catch block around the Process.Start but it doesnt matter since it is still throwing the exception.

Upvotes: 1

Views: 2267

Answers (1)

skimad
skimad

Reputation: 307

Your fileName and arguments are specified incorrectly. Please see below.

private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.CreateNoWindow = false;
            startInfo.UseShellExecute = false;
            startInfo.FileName = "c:\\ffmpeg\\bin\\ffmpeg.exe";
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = "-i shatner.mp4 shatner.avi";

            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;       


            using (Process exeProcess = Process.Start(startInfo))
            {
                string error = exeProcess.StandardError.ReadToEnd();
                string output = exeProcess.StandardError.ReadToEnd();
                exeProcess.WaitForExit();

                MessageBox.Show("ERROR:" + error);
                MessageBox.Show("OUTPUT:" + error);
            }
        }

Upvotes: 2

Related Questions