• C#视频取帧图


    由于项目里页面有许多视频资料需要展示给用户查看,因此需要做一个视频列表,原设计是列表显示视频第一帧图,但实际上很多视频第一帧是纯黑底色。

    于是想到用js利用canvas截图,最后发现由于浏览器跨域限制,这种方法只能取内部视频的帧图。问题是,现在谁还把大量视频资料放在自己的服务器上呢,那不是找死吗。。。。唉。。。。

    没办法,只能再想招了,最后只能用c#后台逐个视频取对应帧图,然后跟视频路径一起存放到视频数据记录表里的办法。

    本文只贴出C#后台取视频的帧图的代码。

    首先,需要下载ffmpeg这个专业的视频处理工具,网上很地方都可以下,也可以点击这里去下载。实现本文功能,只需要包里的ffmpeg.exe这个可执行文件,将他复制一份到项目文件夹下——自己根据需要放一个合理的地方,本文是放在bin文件夹下。

    然后就是代码咯:

            /// <summary>
            /// 从视频画面中截取一帧画面为图片
            /// </summary>
            /// <param name="videoName">视频文件pic/guiyu.mov</param>
            /// <param name="widthAndHeight">图片的尺寸如:240*180</param>
            /// <param name="cutTimeFrame">开始截取的时间如:"1"</param>
            /// <returns></returns>
            public string GetPicFromVideo(string videoName, string widthAndHeight, string cutTimeFrame)
            {
                var vdoName   = videoName.Substring(videoName.LastIndexOf("/") + 1);
                var fileName  = vdoName.Split('.')[0];
                var basePath  = Server.MapPath("~");
                var ffmpeg    = basePath +  "bin\ffmpeg.exe";
                var srcName   = basePath + videoName.Replace("/","\");
                var objName   = basePath + "Images\VideoCover\" + fileName + ".jpg";

                var startInfo = new ProcessStartInfo(ffmpeg);
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                startInfo.Arguments = " -i " + srcName + " -y -f image2 -ss " + cutTimeFrame + " -t 0.001 -s " + widthAndHeight + " " + objName;
                try
                {
                    Process.Start(startInfo);
                    return "/Images/VideoCover/" + fileName + ".jpg";
                }
                catch (Exception re)
                {
                    Log.WriteLog(re.Message);
                    return "";
                }
            }

    //调用举例:
    var re = GetPicFromVideo("video/MyTest.mov", "160*100", "1");


  • 相关阅读:
    android activity声明周期学习笔记
    java笔记之static&final&abstract
    Android 动画分析学习笔记
    43:数据分类
    42:换汽水瓶ExchangeBottle
    41:简单密码
    40: Redraiment的走法(不连续最长子字符串)
    函数返回值是引用(引用当左值)
    引用的本质
    C语言实现计算字符串中最后一个单词长度,单词以空格隔开
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/11057504.html
Copyright © 2020-2023  润新知