这是我
在命令提示符下的做法:
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:ffmpegx86ffmpeg.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();
}
}
}
在窗体 1 顶部:
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 控制台窗口
更改以下 3 行:
process.Start();
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
自:
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
请确保在调用"开始"之前设置 StartInfo 属性。使用 CreateNoWindow,以便不显示任何窗口。