C# Windows 窗体使用 FFMPEG 更改视频格式没有得到响应

C# Windows Forms Using FFMPEG to change video format got no response

提问人:TSLee 提问时间:5/17/2023 最后编辑:TSLee 更新时间:5/21/2023 访问量:157

问:

我正在尝试制作一个 exe 程序来使用 FFMPEG 而不是在终端中进行更改视频格式。格式化的视频将保存在下载文件夹中。我已经在下面尝试了我的代码,但没有得到输出响应。我想知道我是否正确使用了 process() 和 StartInfo,作为我发现的示例,文档只是让我感到困惑。我已经仔细检查了 ffmpeg.exe 在 bin 文件夹中,而 StartInfo() 仅用于获取信息,位于 Process() 下。这就是为什么 Process() 可以访问信息并使用 Start() 来启动进程的原因。请帮助并纠正我的理解。 以下是我的代码的一部分:

private void convertButton_Click(object sender, EventArgs e)
    {
        String input = filepathTextBox.Text;
        String outputResolution = resolutionLabel.Text;
        String output;
        String outputFileType;
        int inputLength = input.Length;
        int l = 0;
        for (int i = (inputLength - 1); inputLength > -1; i--)
        {
            if (input[i] == '.')
            {
                l = i;
                break;
            }
        }
        output = input.Substring(0, l - 1);
        outputFileType = input.Substring(l + 1, inputLength - 1);
        Process process = new Process();
        process.StartInfo.UseShellExecute = true;
        process.StartInfo.FileName = "ffmpeg.exe";
        process.StartInfo.WorkingDirectory = @"C:\Users\User\Downloads\ffmpeg-2023-05-15-git-2953ebe7b6-full_build\bin";
        process.StartInfo.Arguments = "ffmpeg -i" + @"C:\Users\User\Downloads\file_example_MP4_640_3MG.mp4" + "-s 320x240 -r 25 -b:v 500000 -pix_fmt yuv420p -c:v libx264     -vprofile baseline -level  2.1 -x264opts  stitchable=1:level=3.0:keyint=15:ref=1:merange=16:mvrange=32 -acodec pcm_s16le -ar 16000 -ac 1" + @"C:\Users\User\Downloads\440.mp4";
        process.Start();
    }

输出: “myprogram.exe(CoreCLR: clrhost): 加载了”C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.15\System.Diagnostics.Process.dll”。跳过加载符号。模块已优化,调试器选项“Just My Code”已启用。 线程0x79e0已退出,代码为 0 (0x0)。

C# .NET 可视化工作室 2010 ffmpeg windows窗体设计器

评论

0赞 TechLoom 5/18/2023
您是否测试过该命令是否在 FFMPEG 中有效?我会尝试将其扔到控制台以获取字符串的内容,然后首先手动测试它。
0赞 TSLee 5/18/2023
@TechLoom 是的,我做到了。该命令起作用了,我找到了新格式化的视频。
0赞 TSLee 5/18/2023
@TechLoom我已经更新了命令。由于自动格式化,它有一些错误。
1赞 TechLoom 5/18/2023
我仍然认为您正在制作的字符串存在格式问题。这意味着它将输出 ffmpeg -iC:\Users\User\Downloads\file_example_MP4_640_3MG.mp4您必须在将字符串添加在一起时包含空格。"ffmpeg -i" + @"C:\Users\User\Downloads\file_example_MP4_640_3MG.mp4"
1赞 user246821 5/18/2023
Filename应该是 的完全限定路径。很少使用,很可能应该将其设置为“为什么你有作为参数的一部分?应为 Process 设置一些其他属性。您可能需要设置 WorkingDirectory,但应尽量避免对路径进行硬编码。ffmpeg.exeUseShellExecute = true;UseShellExecute = false;ffmpeg

答:

0赞 TSLee 5/21/2023 #1

参数应该是这样的

 $"-i {input} -s 320x240 -r 25 -b:v 500000 -pix_fmt yuv420p -c:v libx264 -vprofile baseline -level 2.1 -x264opts  stitchable=1:level=3.0:keyint=15:ref=1:merange=16:mvrange=32 -acodec pcm_s16le -ar 16000 -ac 1 {output}",

当文件名被分配时。一旦进程启动,进程将转到以下路径,并使用命令参数执行exe文件。

对于上面的代码,我在 ffmpeg exe 中执行了 ffmpeg。这就是为什么它不起作用。