实现上传视频的时候自动为视频截图

用asp.net写的网页,在网上找了代码,使用ffmpeg.exe的插件实现,但是我参考了其代码,一直没能实现,有没有有经验的人指点一下,以下为参考的代码

public string CatchImg(string vFileName)
    {
        //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:/ffmpeg/ffmpeg.exe" />
        string ffmpeg=System.Configuration.ConfigurationManager.AppSettings["ffmpeg"];
        if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(vFileName)))
        {
            return "";
        }
        //获得图片相对路径/最后存储到数据库的路径,如:/Web/FlvFile/User1/00001.jpg
        string flv_img = System.IO.Path.ChangeExtension(vFileName,".jpg") ;
        //图片绝对路径,如:D:/Video/Web/FlvFile/User1/0001.jpg
        string flv_img_p = HttpContext.Current.Server.MapPath(flv_img);
        //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" />
        string FlvImgSize=System.Configuration.ConfigurationManager.AppSettings["CatchFlvImgSize"];
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
        startInfo.Arguments = " -i " + vFileName + " -y -f image2 -t 0.001 -s " + FlvImgSize + "" + flv_img_p;
        try 
        {
            System.Diagnostics.Process.Start(startInfo);
        }
        catch
        {
            return "";
        }
        ///注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;
        ///这儿需要延时后再检测,我服务器延时8秒,即如果超过8秒图片仍不存在,认为截图失败;
        ///此处略去延时代码.如有那位知道如何捕捉ffmpeg.exe截图失败消息,请告知,先谢过!
        if ( System.IO.File.Exists(flv_img_p))
        {
            return flv_img; 
        }
        return "";
    }
阅读 7.3k
1 个回答

执行shell命令用ffmpeg等类似工具截图。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进