zoukankan      html  css  js  c++  java
  • C# 视频上传之使用ffmpeg截取视频第一帧当做背景图

    1、在官网下载ffmpeg,http://ffmpeg.org/download.html

     我下载的是Windows 64的,如系统是Windows 32,请下载Windows 32-bit

      下载完成后解压,得到如下图文件:

     打开bin文件:

     bin文件夹所有.dll.exe文件复制到项目bin文件夹下。

      如果想通过cmd命令截取,需要ffmpeg.exe的路径配置到环境变量里的Path,可参考https://www.cnblogs.com/hbtmwangjin/articles/9519848.html  

      我这里是通过代码截取第一帧图片,保存到后台,并把图片路径保存到数据库中,没有配置环境变量也可以操作。

      截取图片方法:

    /// <summary>
            /// 从视频画面中截取一帧画面为图片
            /// </summary>
            /// <param name="videoName">视频文件路径pic/123.MP4</param>
            /// <param name="widthAndHeight">图片的尺寸如:240*180</param>
            /// <param name="cutTimeFrame">开始截取的时间如:"1s"</param>
            /// <returns>返回图片保存路径</returns>
            public static string GetPicFromVideo(string videoName, string widthAndHeight, string cutTimeFrame)
            {
                var vdoName = videoName.Substring(videoName.LastIndexOf("/") + 1);
                var fileName = vdoName.Split('.')[0];
                var dtime = DateTime.Now.ToString("yyyy-MM-dd");
                var basePath = System.Web.HttpContext.Current.Server.MapPath("~");
                var ImgPath = basePath + "upload\Images\" + dtime;
                //ffmpeg.exe路径
                var ffmpeg = basePath + "bin\ffmpeg.exe";
                var srcName = basePath + videoName.Replace("/", "\");
                
                if (!Directory.Exists(ImgPath))
                {
                    Directory.CreateDirectory(ImgPath);
                }
                //保存截取图片后路径
                var objName = " "+ ImgPath + "\"+  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;
                //startInfo.UseShellExecute = false;
                //startInfo.CreateNoWindow = true;
                try
                {
                    Process.Start(startInfo);
                    //返回图片保存路径
                    return "/upload/Images/" + dtime+"/" + fileName + ".jpg";
                }
                catch (Exception re)
                {
                    //Log.WriteLog(re.Message);
                    return "";
                }
            }

    调用:

    var  gb_img_scr = PicFromVideo.GetPicFromVideo(src, "160*300", "1");
  • 相关阅读:
    轻松理解https,So easy!
    都 9102 年了,一起来攻克 Linux 吧!
    8种常见SQL错误用法,你中招了吗?
    如何写出让同事无法维护的代码?
    Spring Boot 2.1.6 发布了!
    推荐一款 MyBatis 开发神器,为简化而生!
    vs2015制作一个超级简单的MVC项目
    解析ASP.NET WebForm和Mvc开发的区别
    asp.net 的 web form 过时了吗
    Asp.net的WebForm的落后技术
  • 原文地址:https://www.cnblogs.com/xinbaba/p/11363224.html
Copyright © 2011-2022 走看看