c# - 我如何使用 ffmpeg 捕获整个桌面但没有 ffmpeg 的控制台窗口?

标签 c# .net winforms ffmpeg

这个问题在这里已经有了答案:





Launching process in C# Without Distracting Console Window

(4 个回答)


4年前关闭。




这就是我在命令提示符下的做法:

ffmpeg -f gdigrab -framerate 24 -i desktop -preset ultrafast -pix_fmt yuv420p out.mp4

在 csharp 代码中:
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using System.IO;  
using System.Diagnostics;  

namespace Ffmpeg_App  
{  
    class Ffmpeg  
    {  
        Process process;  

        public void Start(string FileName, int Framerate)  
        {  
            process = new System.Diagnostics.Process();  
            process.StartInfo.FileName = @"D:\ffmpegx86\ffmpeg.exe"; // Change the directory where ffmpeg.exe is.  
            process.EnableRaisingEvents = false;  
            process.StartInfo.WorkingDirectory = @"D:\ffmpegx86"; // The output directory  
            process.StartInfo.Arguments = @"-f gdigrab -framerate " + Framerate + " -i desktop -preset ultrafast -                                                                     pix_fmt yuv420p " + FileName;  
            process.Start();  
            process.StartInfo.UseShellExecute = false;  
            process.StartInfo.CreateNoWindow = false;  
            Close();  
        }  

        public void Close()  
        {  
            process.Close();  
        }  
    }  
}  

在 form1 顶部:
Ffmpeg fpeg = new Ffmpeg();

开始按钮:
private void Start_Click(object sender, EventArgs e)  
        {  
            fpeg.Start("test.mp4", 24);  
        }  

停止按钮:
private void Stop_Click(object sender, EventArgs e)  
        {  
            fpeg.Close();  
        } 

问题是当我开始录制它时,它也会录制前几秒钟,当我停止录制时,ffmpeg 的控制台窗口也一样。

如何在这两种情况下仅使用命令提示符或使用 csharp 使其不会显示 ffmpeg 的控制台窗口?

Ffmpeg console window

最佳答案

更改这 3 行:

process.Start(); 
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;

至:
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start(); 

确保在调用 Start 之前设置 StartInfo 属性。使用 CreateNoWindow 以便不显示任何窗口。

关于c# - 我如何使用 ffmpeg 捕获整个桌面但没有 ffmpeg 的控制台窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058950/

相关文章:

c# - 创建嵌入式mysql数据库

c# - 构建大量项目和解决方案时如何节省磁盘空间?

c# - Azure 云服务 Web 角色未启动 - 未处理的异常 - 无法找到程序集

c# - 使用 XmlSerializer 将 xml 元素反序列化为数组不起作用

.net - 使用多线程时出现多个通知图标

c# - 在 C# 中提供方法的同步和异步版本

c# - Visual Studio 2019 Intellisense for Linq 加入类未出现

c# - 为什么我的水平工具条一直垂直堆叠?

c# - 为什么仅在调试时才引发跨线程异常?

c# - StreamSocket.InputStreamOptions.ReadAsync 在使用 Wait() 时挂起