如何使用FFMPEG获得视频尺寸

本文关键字:视频 何使用 FFMPEG | 更新日期: 2023-09-27 18:03:05

我的目标是将视频文件传递给FFMPEG并获得其维度作为输出。我怎样才能做到这一点呢?谁能帮助我与样例代码?

如何使用FFMPEG获得视频尺寸

public void GetVideoInfo(string input)
    {
        //  set up the parameters for video info.
        string @params = string.Format("-i {0}", input);
        string output = Run(ffmpegProcess, @params);
        //get the video format
        re = new Regex("(''d{2,3})x(''d{2,3})");
        Match m = re.Match(output);
        if (m.Success)
        {
            int width = 0; int height = 0;
            int.TryParse(m.Groups[1].Value, out width);
            int.TryParse(m.Groups[2].Value, out height);
        }
    }
private static string Run(string process/*ffmpegFile*/, string parameters)
    {
        if (!File.Exists(process))
            throw new Exception(string.Format("Cannot find {0}.", process));
        //  Create a process info.
        ProcessStartInfo oInfo = new ProcessStartInfo(process, parameters);
        //oInfo.UseShellExecute = false;
        //oInfo.CreateNoWindow = true;
        //oInfo.RedirectStandardOutput = true;
        //oInfo.RedirectStandardError = true;
        //  Create the output and streamreader to get the output.
        string output = null;
        //StreamReader outputStream = null;
        //  Try the process.
        //try
        //{
        //  Run the process.
        Process proc = System.Diagnostics.Process.Start(oInfo);
        proc.WaitForExit();
        //outputStream = proc.StandardError;
        //output = outputStream.ReadToEnd();    
        proc.Close();
        //}
        //catch( Exception ex )
        //{
        //    output = ex.Message;
        //}
        //finally
        //{
        //    //  Close out the streamreader.
        //    if( outputStream != null )
        //        outputStream.Close();
        //}
        return output;
    }

您应该取消注释一些代码以使其工作。希望能有所帮助。

我有代码,从视频,不同的转换等获得更多的信息。上面的代码是切片的,可能需要稍加修改。

您尝试过ffmpeg - c#库吗?

您应该使用命令"-i{0}"({0}是视频路径)创建执行ffprobe的c#进程。

我不知道为什么,但是当你在c#进程上运行ffmpeg时,它总是在错误通道中返回输出,因此你必须在进程完成后读取标准错误流。

当我们得到输出字符串时,我们可以通过运行正则表达式来找到它的分辨率。

int intVideoWidth = 0; int intVideoHeight = 0;
Process processGetOriginalVideoData = new Process();
processGetOriginalVideoData.StartInfo.CreateNoWindow = true;
processGetOriginalVideoData.StartInfo.ErrorDialog = false;
processGetOriginalVideoData.StartInfo.RedirectStandardOutput = true;
processGetOriginalVideoData.StartInfo.RedirectStandardInput = true;
processGetOriginalVideoData.StartInfo.RedirectStandardError = true;
processGetOriginalVideoData.StartInfo.UseShellExecute = false;
processGetOriginalVideoData.StartInfo.FileName = "C:''FFmpeg''bin''ffprobe.exe";
processGetOriginalVideoData.StartInfo.Arguments = string.Format("-i {0}", strMyVideoPath);
processGetOriginalVideoData.Start();
processGetOriginalVideoData.WaitForExit();
StreamReader processGetOriginalVideoDataOutputStream = processGetOriginalVideoData.StandardError;
string strProcessGetOriginalVideoDataOutput = await processGetOriginalVideoDataOutputStream.ReadToEndAsync();
processGetOriginalVideoData.Kill();
var resolutionRegex = new System.Text.RegularExpressions.Regex("(''d{2,4})x(''d{2,4})");
System.Text.RegularExpressions.Match resolutionRegexMatches = resolutionRegex.Match(strProcessGetOriginalVideoDataOutput);
if (resolutionRegexMatches.Success)
{
    int.TryParse(resolutionRegexMatches.Groups[1].Value, out intVideoWidth);
    int.TryParse(resolutionRegexMatches.Groups[2].Value, out intVideoHeight);
}