运行 CMD 和 ffmpeg Windows 窗体

Posted

技术标签:

【中文标题】运行 CMD 和 ffmpeg Windows 窗体【英文标题】:Run CMD and ffmpeg Windows Forms 【发布时间】:2022-01-18 15:32:46 【问题描述】:

我正在尝试在我的 Windows 窗体应用程序中使用 ffmpeg,并且我是苹果来转换单个文件,但现在我正在尝试选择整个文件夹并运行 cmd ffmpeg。

我已经使用 cmd 进行了测试,下面的行会自动转换整个文件夹中的所有文件,但我不知道如何在我的 winforms 应用程序中实现这一点。任何人都知道如何将其添加到我的代码中?

for %i in (*.flv) do ffmpeg -i "%i" "%~ni.mkv"

这是我在不选择 PATH 的情况下转换单个文件时使用的示例代码:

// Using OpenFileDialog to get Folder Path
private void button1_Click(object sender, EventArgs e)

     openFileDialog1.ValidateNames = false;
     openFileDialog1.CheckFileExists = false;
     openFileDialog1.CheckPathExists = true;
     openFileDialog1.FileName = "Folder Selection.";

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        
            string folderPath = Path.GetDirectoryName(openFileDialog1.FileName);
            textBox1.Text = folderPath;
        
    

    private void buttonConvert_Click(object sender, EventArgs e)
    
       string output = $"output--DateTime.Now.Ticks.mkv";
        LaunchCommandLineApp("sample.flv", output);
        Process.Start("explorer.exe", "/select, \"" + output + "\"");
    

    private void LaunchCommandLineApp(string input, string outputFile)
    
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = $"-i input outputFile";

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

【问题讨论】:

您期望的服务究竟是什么?您是否希望这个社区中的某个人免费为您编写一些代码?请确保您使用tour,然后通读How to Ask 的页面,以更好地了解您注册的网站是如何工作的。一般来说,我们希望您编写自己的代码,并且当它无法完成编写的任务时,没有任何问题,您会发布该代码,并突出显示问题,以便我们可以重现它,然后提供帮助你在修理它。 在我看来你已经完成了困难的部分,你现在只需要使用Directory.GetFiles。您的问题可以改写为“如何使用 c# 获取目录中的文件?”。你已经有一个答案告诉你如何使用它。 【参考方案1】:

您编写的 DOS 命令是一个重复调用 FFMpeg 命令的 for 循环。在 C# 中执行相同的操作,例如:

foreach(var file in Directory.GetFiles(textBox1.Text, "*.flv")) //textBox1.Text == the folder path
  LaunchCommandLineApp(file, Path.ChangeExtension(file, "mkv"));

如果您的路径有空格,您可能需要考虑在命令中加上引号 - 您的 DOS 命令有空格,而您的 C# 似乎没有空格。

考虑$@"-i ""input"" ""outputFile"""

【讨论】:

以上是关于运行 CMD 和 ffmpeg Windows 窗体的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows上安装FFmpeg程序

Windows CMD 批处理脚本 FFmpeg

java运行cmd命令后获取返回信息的问题!看一下代码!

ffmpeg Windows10下的安装及使用

关于ffmpeg和OpenCV在windows下运行要添加的环境变量

运行./configure时在Windows上编译FFmpeg错误