看见网上提问的人比较多,希望这个方法对大家有帮助吧。
使用ffmpeg命令行录制桌面,正常结束是在cmd窗口中输入“q”,或者直接ctrl+c;
但是在程序中通过process调用的ffmpeg.exe会出现以下问题:
1.在第一次录制中可以使用模拟ctrl+c正常结束,第二次就不能结束了。
2.如果使用kill强制结束那录制的视频就不能播放了,原因可能是视频没有写入文件尾。
既然模拟ctrl+c行不通了,那就只能试试把“q”写进标准输入
//此方法可以正常停止ffmpeg
public void StopProcess()
{
if(proc != null)
{
proc.StandardInput.WriteLine("q");
proc.StandardInput.AutoFlush = true;
}
}
那开启也是比较简单的
public void RunProcess(string Parameters)
{
//创建一个ProcessStartInfo对象 并设置相关属性
var oInfo = new ProcessStartInfo(FFmpegPath, Parameters);
oInfo.UseShellExecute = false;
oInfo.CreateNoWindow = true;
oInfo.RedirectStandardOutput = true;
oInfo.RedirectStandardError = true;
oInfo.RedirectStandardInput = true;
{
proc = Process.Start(oInfo);
pid = proc.Id;
proc.EnableRaisingEvents = true;
proc.BeginErrorReadLine();
proc.WaitForExit();
proc.Close();
proc.Dispose();
}
}
这篇博客介绍了如何在程序中使用ffmpeg命令行录制桌面,并通过模拟用户输入或发送信号来控制录制的开始和结束。作者指出,通过模拟Ctrl+C在第二次录制时可能无法正常结束,而直接使用kill命令会破坏视频文件。解决方法是将“q”写入ffmpeg的标准输入来优雅地停止录制。提供的代码示例展示了如何实现这一功能。
861





