- 好的,我将展示如何在C#中执行FFmpeg命令,并监听回调信息,包括失败和成功事件。下面是一个完整的示例代码:
- ```csharp
- using System;
- using System.Diagnostics;
- using System.IO;
- namespace FFmpegExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- string inputFile = "input.mp4";
- string outputFile = "output.mp4";
- string ffmpegPath = "path/to/ffmpeg";
- ExecuteFFmpegCommand(ffmpegPath, inputFile, outputFile);
- }
- static void ExecuteFFmpegCommand(string ffmpegPath, string inputFile, string outputFile)
- {
- try
- {
- string arguments = $"-i "{inputFile}" -c:v libx264 -crf 23 "{outputFile}"";
- using (Process process = new Process())
- {
- process.StartInfo.FileName = ffmpegPath;
- process.StartInfo.Arguments = arguments;
- process.StartInfo.UseShellExecute = false;
- process.StartInfo.RedirectStandardOutput = true;
- process.StartInfo.RedirectStandardError = true;
- process.OutputDataReceived += Process_OutputDataReceived;
- process.ErrorDataReceived += Process_ErrorDataReceived;
- process.Start();
- process.BeginOutputReadLine();
- process.BeginErrorReadLine();
- process.WaitForExit();
- if (process.ExitCode == 0)
- {
- Console.WriteLine("FFmpeg命令执行成功!");
- }
- else
- {
- Console.WriteLine($"FFmpeg命令执行失败,退出代码:{process.ExitCode}");
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"发生异常:{ex.Message}");
- }
- }
- private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
- {
- if (!string.IsNullOrWhiteSpace(e.Data))
- {
- Console.WriteLine(e.Data);
- }
- }
- private static void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
- {
- if (!string.IsNullOrWhiteSpace(e.Data))
- {
- Console.WriteLine(e.Data);
- }
- }
- }
- }
- ```
- 在上面的代码中,我们定义了一个`ExecuteFFmpegCommand`方法,用于执行FFmpeg命令。这个方法接收三个参数:FFmpeg的路径,输入文件和输出文件。
- 在`ExecuteFFmpegCommand`方法内部,我们首先构建FFmpeg命令行参数,然后创建一个新的`Process`对象。我们设置了`StartInfo`属性,包括FFmpeg的路径和命令行参数,并启用了重定向标准输出和错误输出。
- 接下来,我们为`Process`对象的`OutputDataReceived`和`ErrorDataReceived`事件绑定了事件处理程序。这两个事件分别用于捕获FFmpeg的标准输出和错误输出。在事件处理程序中,我们将输出信息直接写入控制台。
- 然后,我们调用`Process.Start()`启动FFmpeg进程,并调用`BeginOutputReadLine`和`BeginErrorReadLine`方法开始异步读取输出和错误信息。
- 最后,我们等待FFmpeg进程退出,并根据退出代码判断命令是否执行成功。
- 在这个示例中,我们监听了FFmpeg的标准输出和错误输出,并将它们打印到控制台。你可以根据实际需求,在事件处理程序中进行其他操作,例如记录日志、发送通知等。
- 需要注意的是,你需要确保FFmpeg可执行文件存在于指定的路径,并且输入文件也存在。否则,FFmpeg命令将无法正确执行。
复制代码 |