C#:读取视频的宽度和高度等信息

读取方式:使用ffmpeg读取,所以需要先下载ffmpeg。网上资源有很多。

通过ffmpeg执行一条CMD命令可以读取出视频的帧高度和帧宽度信息。

如图:

蓝线框中可以看到获取到的帧高度和帧宽度。

接下来的事情就简单了。构造一个命令,然后执行就ok。我并未测试过所有视频格式,估计常见的格式应该都支持。

执行命令的代码如下:

/// <summary>
        /// 执行一条command命令
        /// </summary>
        /// <param name="command">需要执行的Command</param>
        /// <param name="output">输出</param>
        /// <param name="error">错误</param>
        public static void ExecuteCommand(string command,out string output,out string error)
        {
            try
            {
                //创建一个进程
                Process pc = new Process();
                pc.StartInfo.FileName = "cmd.exe";
                pc.StartInfo.UseShellExecute = false;
                pc.StartInfo.RedirectStandardInput = true;
                pc.StartInfo.RedirectStandardOutput = true;
                pc.StartInfo.RedirectStandardError = true;
                pc.StartInfo.CreateNoWindow = true;

                //启动进程
                pc.Start();
                //执行命令
                pc.StandardInput.WriteLine(command);

                //等待退出
                pc.StandardInput.WriteLine("exit");

                //获取所有输出
                output = pc.StandardOutput.ReadToEnd();
                error = pc.StandardError.ReadToEnd();
                //关闭进程
                pc.Close();
            }
            catch(Exception)
            {
                output = null;
                error = null;
            }
        }

获取高度的宽度的代码如下:(这里假设ffmpeg存在于应用程序目录)

/// <summary>
        /// 获取视频的帧宽度和帧高度
        /// </summary>
        /// <param name="videoFilePath">mov文件的路径</param>
        /// <returns>null表示获取宽度或高度失败</returns>
        public static void GetMovWidthAndHeight(string videoFilePath, out int? width, out int? height)
        {
            try
            {
                //判断文件是否存在
                if (!File.Exists(videoFilePath))
                {
                    width = null;
                    height = null;
                }

                //执行命令获取该文件的一些信息
                string ffmpegPath = new FileInfo(Process.GetCurrentProcess().MainModule.FileName).DirectoryName + @"\ffmpeg.exe";

                string output;
                string error;
                Helpers.ExecuteCommand("\"" + ffmpegPath + "\"" + " -i " + "\"" + videoFilePath + "\"",out output,out error);
                if(string.IsNullOrEmpty(error))
                {
                    width = null;
                    height = null;
                }

                //通过正则表达式获取信息里面的宽度信息
                Regex regex = new Regex("(\\d{2,4})x(\\d{2,4})", RegexOptions.Compiled);
                Match m = regex.Match(error);
                if (m.Success)
                {
                    width = int.Parse(m.Groups[1].Value);
                    height = int.Parse(m.Groups[2].Value);
                }
                else
                {
                    width = null;
                    height = null;
                }
            }
            catch (Exception)
            {
                width = null;
                height = null;
            }
        }

转载声明:本文转载自http://www.zhoumy.cn/,原文链接:http://www.zhoumy.cn/?p=35

时间: 2024-08-01 10:46:09

C#:读取视频的宽度和高度等信息的相关文章

C#读取视频的宽度和高度等信息的方法

本文实例讲述了C#读取视频的宽度和高度等信息的方法.分享给大家供大家参考.具体实现方法如下: 读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 通过ffmpeg执行一条CMD命令可以读取出视频的帧高度和帧宽度信息. 运行效果如下图所示: 蓝线框中可以看到获取到的帧高度和帧宽度. 接下来的事情就简单了.构造一个命令,然后执行就ok.我并未测试过所有视频格式,估计常见的格式应该都支持. 执行命令的代码如下: 代码如下: /// <summary> /// 执行一条com

Android下在onCreate中获取控件的宽度和高度(通过回调)

有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息, 而直接调用View组件的getWidth().getHeight().getMeasuredWidth().getMeasuredHeight().getTop().getLeft()等方法是无法获取到真实值的,只会得到0. 这是因为View组件布局要在onResume回调后完成. 下面提供实现方法: 第一种: onGlobalLayout回调会在布局完成时自动调用 img1.getViewTreeObserver().

opencv学习之路(2)、读取视频,读取摄像头

一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open("1.avi"); B. VideoCapture cap("1.avi"); ②循环显示每一帧: while(1) { Mat frame; //定义Mat变量,用来存储每一帧 cap>>frame; //读取当前帧方法一 //cap.read(frame); /

有两种分别用&lt;bgsound&gt;和&lt;embed&gt;&lt;/embed&gt;标签,当用&lt;embed&gt;插入背景音乐时可以设置宽度和高度为0,隐藏播放器。

<bgsound>: <bgsound> 是用来插入背景音乐,但只适用于 ie,其参数设定不多.如下 <bgsound src="your.mid" autostart=true loop=infinite> src="your.mid"设定 midi 档案及路径,可以是相对或绝对.autostart=true是否在音乐档下载完之后就自动播放.true 是,false 否 (内定值).loop=infinite是否自动反复播放.l

获取图像的宽度、高度

string file = "D:\\QQ截图20141205121451.png"; //new一个Image实例,并读取图片 System.Drawing.Image insusImage = System.Drawing.Image.FromFile(file); //实例就可以取得宽度与高度了. Response.Write(insusImage.Width.ToString()+" "+insusImage.Height.ToString()); retu

HTML连载39-外边距合并现象、盒子模型以及宽度和高度

一. 在默认布局的垂直方向上,默认情况下外边距是是不会叠加的,会出现合并现象,谁的外边距较大,就听谁的:但是在水平方向就不会出现这种状况,我们举个例子 span{ display: inline-block; width:100px; height:100px; border:1px solid red; } div{ width:100px; height:100px; border:1px solid green; } /*我们让span的两个盒子,相距100px*/ .hezi1{ mar

设置单元格的宽度和高度

NPOI官方网站:http://npoi.codeplex.com/ 在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致.所以要设置单元格的宽度,我们就得从列的宽度下手,HSSFSheet有个方法叫SetColumnWidth,共有两个参数:一个是列的索引(从0开始),一个是宽度. 现在假设你要设置B列的宽度,就可以用下面的代码: HSSFWorkbook hssfworkbook = new HSSFWorkbook(); HSSFSheet shee

web前端入门到实战:外边距合并现象、盒子模型以及宽度和高度

一. 在默认布局的垂直方向上,默认情况下外边距是是不会叠加的,会出现合并现象,谁的外边距较大,就听谁的:但是在水平方向就不会出现这种状况,我们举个例子 span{ display: inline-block; width:100px; height:100px; border:1px solid red; } div{ width:100px; height:100px; border:1px solid green; } /*我们让span的两个盒子,相距100px*/ .hezi1{ mar

动态设置图片的宽度和高度

动态设置图片控件的宽度和高度: imageView.getLayoutParams().width=600;imageView.getLayoutParams().height=400; 设置图片(src): imageView.setImageResource(resId); android获得屏幕高度和宽度: 1.WindowManager wm = (WindowManager) getContext()                     .getSystemService(Cont