【问题标题】:Run CMD and ffmpeg Windows Forms运行 CMD 和 ffmpeg Windows 窗体
【发布时间】: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# 获取目录中的文件?”。你已经有一个答案告诉你如何使用它。

标签: c# winforms cmd ffmpeg


【解决方案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}"""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    相关资源
    最近更新 更多