序言
最近在写一个软件,这个软件需要获取视频的帧率信息,但是目前在网上我并没有查到相关的信息
但是我突然想到ffmpeg可以获取到视频信息,但是信息太杂乱了,没法用但是这能难倒我吗?笑死根本不可能
根据我玩Linux多年的经验告诉我Windows下肯定也有在命令行下能处理信息的程序,我想了一下,确实有那就是:findstr这个程序有点像Linux下的grep,也是可以通过管道获取信息流并且处理信息流,有了思路,接下来就讲一下详细的实现过程吧.
系统环境
操作系统: Windows 10 企业版 1944.2006
开发环境:Microsoft Visual Studio 2022 企业版
编程语言:C#(C Sharp)
实现过程
我们先来看一下ffmpeg的输出信息:
图中红框的地方就是我们需要的关键信息,但是想要把它提取出来并不简单,主要是过程太过繁琐
我先上代码然后再逐句解释:
public double getFPS(string videoFile)
{
Process ffmpeg = new Process();
ffmpeg.StartInfo.FileName = "powershell.exe";
ffmpeg.StartInfo.Arguments = "-command \"program\\ffmpeg.exe -i " + videoFile + " >result 2>&1\"";
ffmpeg.Start();
ffmpeg.WaitForExit();
Process cmd = new Process();
cmd.StartInfo.FileName = "powershell.exe";
cmd.StartInfo.Arguments = "-command \"cat ./result|findstr \"fps\" >result.tmp 2>&1\"";
cmd.Start();
cmd.WaitForExit();
log.Infomation(ffmpeg.StartInfo.Arguments);
string result = File.ReadAllText("result.tmp");
string[] fps = result.Split(" ");
log.Success("成功获取到帧率:" + fps[18]);
File.Delete("result");
return Convert.ToDouble(fps[18]);
}