本帖最后由 woyaodubo 于 2013-12-10 13:04:02 编辑

解决方案 »

  1.   

    就这个截图,从昨晚搞到现在都没搞好,视频上传,Copy都没问题,插入数据库也没问题的,就是视频缩略图文件夹老是空白,没图片。
      

  2.   

    bool ok = catchImg(Server.MapPath("../" + playFile), Server.MapPath("../" + videoImg));  
    这里catchimg 返回OK吗?
    另外你在web中使用  Process pss = new Process();
                //设置启动程序的路径
                pss.StartInfo.FileName = ffmpeg;
                pss.StartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + sizeOfImg + "   " + imgFile;
                //启动进程
                pss.Start();
    这个Process 还应该注意权限,IIS用户是否对机器上的应用程序有权限!
      

  3.   

      catchImg定义为布尔型,执行完毕返回true。
    这个只是用来判断 catchImg有没有出错的。
    我是本地VS2010弄的,没有IIS,也不存在权限的问题啊。
      

  4.   

    public static bool catchImg(string fileName, string imgFile)
            {
                //获取截图工具路径
                string ffmpeg = System.Web.HttpContext.Current.Server.MapPath("../") + ffmpegtool;
                Process pss = new Process();
                //设置启动程序的路径
                pss.StartInfo.FileName = ffmpeg;
                pss.StartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + sizeOfImg + "   " + imgFile;
                //启动进程
                pss.Start();            string errormsg = pss.StandardError.ReadToEnd();
                pss.StandardError.Close();            return true;
            }string errormsg = pss.StandardError.ReadToEnd();
                pss.StandardError.Close();
    加上这个,看看错误信息是什么,Process 执行的错误信息会返回出来的,你之前写法是不会报错的!
      

  5.   

    StandardError 尚未重定向行 185:            //启动进程
    行 186:            pss.Start();
    行 187:            string errormsg = pss.StandardError.ReadToEnd();行 188:            pss.StandardError.Close();
    行 189:            return true;
     
      

  6.   

    StandardError 尚未重定向行 185:            //启动进程
    行 186:            pss.Start();
    行 187:            string errormsg = pss.StandardError.ReadToEnd();行 188:            pss.StandardError.Close();
    行 189:            return true;
      
    pss.StartInfo.RedirectStandardError = true;
    pss.StartInfo.CreateNoWindow = true;

    加上这个吧!你对Process 不太熟吗
      

  7.   

    imgFile是什么玩意?图片文件路径吗?中间有空格吗?我就遇到过这种问题,浪费了好几天时间也没找到原因,后来才发现路径中有空格,如 program files这样,用引号把路径括起来就解决了!!
      

  8.   


                pss.Start();
                string errormsg = pss.StandardError.ReadToEnd();
                pss.StartInfo.RedirectStandardError = true;
                pss.StartInfo.CreateNoWindow = false;
                pss.StandardError.Close();
                return errormsg;结果还是弹出提示框,错误的地方还是一样。StandardError 尚未重定向。行 188:            string errormsg = pss.StandardError.ReadToEnd();
      

  9.   

    pss.StartInfo.CreateNoWindow = true;结果也弹出命令提示符窗口。
    StandardError 尚未重定向。行 188:            string errormsg = pss.StandardError.ReadToEnd();
      

  10.   

    ffmpeg 你的这个是一个什么程序,需要什么样的参数
    这程序是放在服务器端的是吗?如果是它怎么可能运行在客户端去完成截图呢?
    Process是可以启动一个进程,但是是在服务器端!
    你这个ffmpeg是什么程序方便发我?我给你研究一下,但是我还是说好,你在vs中运行成功,到时发布在IIS,同样可能因为权限问题用不了,你这个想要运行在客户端,完成截图,是不可能的!
      

  11.   


                string errormsg = pss.StandardError.ReadToEnd();
                pss.StartInfo.RedirectStandardError = true;
                pss.StartInfo.CreateNoWindow = false;
                pss.Start();
                pss.StandardError.Close();
                return errormsg;换了下顺序,没命令提示符窗口,但是错误依旧。StandardError 尚未重定向。行 188:            string errormsg = pss.StandardError.ReadToEnd();
      

  12.   


     //获取截图工具路径
                string ffmpeg = System.Web.HttpContext.Current.Server.MapPath("../") + ffmpegtool;
                Process pss = new Process();            proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                //设置启动程序的路径
                pss.StartInfo.FileName = ffmpeg;
                pss.StartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + sizeOfImg + "   " + imgFile;
                //启动进程
                pss.Start();            string errormsg = pss.StandardError.ReadToEnd();
                pss.StandardError.Close();
      

  13.   

    现在一切错误都消失了,又回到原问题了,还是不能截图。videImg文件夹空空的。
      

  14.   

    string errormsg = pss.StandardError.ReadToEnd();errormsg 这个是空的?
      

  15.   


    弹出上传成功,就是说errormsg是""吧?
    是本地VS2010弄的,没传服务器。                            string ok = catchImg(Server.MapPath("../" + playFile), Server.MapPath("../" + videoImg));
                                
                                if (ok!="")
                                {                                Response.Write("<script language=javascript>alert('上传成功');</script>");
                                    this.CheckBox1.Checked = false;
                                    this.CheckBox2.Checked = false;
                                }
      

  16.   

    会不会是ffmpeg.exe太老了呢?
    这个是我从一个光盘里面拷出来的,都是VS2008时代的光盘。
      

  17.   

    你发我邮箱,我帮你瞧瞧 [email protected]
      

  18.   

    弹出上传成功,就是说errormsg是""吧?
    你为什么说 弹出上传成功 errormsg就是""
    我看你代码只要是没报错都是返回ture啊,所以你为什么说errormsg是“”;
    errormsg是把错误信息保存到这里,但整个执行过程中不会抛异常
      

  19.   

    你行看一下errormsg截获的错误信息吧
    传参数时,对于路径最好是用双引用括起来,这是命令行常识
    pss.StartInfo.Arguments = "   -i   \"" + fileName + "\"  -y  -f  image2   -ss 2 -vframes 1  -s   " + sizeOfImg + "   \"" + imgFile + "\"";
      

  20.   


    我返回了return errormsg;public static string catchImg(string fileName, string imgFile)
    {
        . 
        .
    return errormsg;
    }
      

  21.   

    我还没收到你发的邮件,我邮箱地址是[email protected] ,要么发到我[email protected]
      

  22.   


    还素不行啊,现在根本不知道什么错误,catchimg我有返回errormsg的,但是判断的结果是为空啊,就是没返回了吗?
      

  23.   

    FFmpeg version SVN-r12665, Copyright (c) 2000-2008 Fabrice Bellard, et al.
      configuration: --enable-gpl --enable-postproc --enable-swscale --enable-avfilter-lavf --enable-pthreads --enable-liba52 --enable-avisynth --enable-libfaac --enable-libfaad --enable-libgsm --enable-memalign-hack --enable-libmp3lame --enable-libnut --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --cpu=i686 --extra-ldflags=-static
      libavutil version: 49.6.0
      libavcodec version: 51.54.0
      libavformat version: 52.13.0
      libavdevice version: 52.0.0
      built on Apr  2 2008 22:35:11, gcc: 4.2.3
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported audio codec (a)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    [flv @ 00AA6C70]Unsupported video codec (7)
    Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 15.00 (15/1)
    Input #0, flv, from 'C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\playFile\131210165346737.flv':
      Duration: 00:03:19.5, start: 0.000000, bitrate: N/A
        Stream #0.0: Video: 0x0007, 15.00 tb(r)
        Stream #0.1: Audio: 0x000a, 44100 Hz, stereo
    swScaler: Unknown format is not supported as input pixel format
    Cannot get resampling context
    这是errormsg的错误内容
      

  24.   

    Unknown format is not supported as input pixel format我传了个flv的格式的,它说未知格式 ,不支持这个格式吗?我没用过你这个ffmpeg.exe
    不知道ffmpeg.exe你这个是怎么用法 他支持一些什么呢?
    这用这种方式做截图,一但发布到IIS后,是行不通的!有权限问题的
      

  25.   

       -i   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\playFile\131210165346737.flv  -y  -f  image2   -ss 2 -vframes 1  -s   240x180   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\videoImg\131210165346737.jpg请注意红色部分!
     pss.StartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + sizeOfImg + "   " + imgFile;
                //启动进程             
                pss.Start();红色部分为客户的flv的真实路径 ,到时你发布到IIS 后,你的Process 是运行在服务器端的,所以你命令中的-i 参数不应该是客户端的地址,而是服务端站点下的某地址,另外,你要把ffmpeg.exe这程序设置成允许IIS用户有运行权限!你还可以把应用程序的标识 设置成administrator !
      

  26.   


    这个ffmpeg.exe是我买的一本书附带的,vs2008时代的。刚才在网上下载了一个也是不行。
      

  27.   

    那要怎么搞啊,自己可以登录服务器设置权限的,这样没事吧,可是现在在自己的电脑上都不行啊。现在自己电脑上不行 的原因你先解决 直接命令行下 去截取视频的图,看能成功不,不要用程序去启动ffmpeg.exe这个,你直接在cmd命令行运行   ffmpeg.exe -i   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\playFile\131210165346737.flv  -y  -f  image2   -ss 2 -vframes 1  -s   240x180   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\videoImg\131210165346737.jpg
    看能把图片截到相应文件夹不,如果能成功,代码里也会成功的,前提是在你本机上
      

  28.   

    ffmpeg -i "C:\Users\luo_s_000\Desktop\test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\videoImg\test.jpg'win+R 弹出来的命令行中,cd 到你的 ffmpeg 所有目录 然后输入上面的东西
      

  29.   

    那要怎么搞啊,自己可以登录服务器设置权限的,这样没事吧,可是现在在自己的电脑上都不行啊。现在自己电脑上不行 的原因你先解决 直接命令行下 去截取视频的图,看能成功不,不要用程序去启动ffmpeg.exe这个,你直接在cmd命令行运行   ffmpeg.exe -i   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\playFile\131210165346737.flv  -y  -f  image2   -ss 2 -vframes 1  -s   240x180   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\videoImg\131210165346737.jpg
    看能把图片截到相应文件夹不,如果能成功,代码里也会成功的,前提是在你本机上
    额滴天那,我换了一个flv文件可以了。
    以前的那些flv都是从优酷上下载的,从优酷视频格式转换过来的FLV. 为什么优酷转换过来的flv会不行呢?
      

  30.   

     -i   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\playFile\131210173626315.flv  -y  -f  image2   -ss 2 -vframes 1  -s   240x180   C:\Users\luo_s_000\Desktop\blog\blog\blog\Teacher\videoImg\131210173626315.jpg我也正相望告诉你,换个flv就可以了,这可能由于是flv的播放的帧或者其它什么内部格式造成的!
    这种不太稳定,不建议你用这个去做视频的图片截取,换换别的办法吧!~
      

  31.   


    你可以在网上google一下!应该还有别的办法解决视频截图问题!我先下班了,有空帮你找找其它办法
      

  32.   


    你可以在网上google一下!应该还有别的办法解决视频截图问题!我先下班了,有空帮你找找其它办法好滴,网上基本上就是这种截图办法了,找不到其他的。
      

  33.   

    我在网上都找了一下,貌似大家都是的ffmpeg.exe来完成此功能的,
    暂时没找到其它办法
    我再提出我的想法:
    第一:还是用ffmpeg.exe来截取,如果截取失败的那种,就显示个默认视频图片
    第二:让用户手动截图,再把手动截取的图片当作视频图片传上
    第一种方式有要注意的地方就是 你一定要把ffmpeg.exe工具放在站点里,然后用.Server.MapPath("~/ffmpeg.exe");这种方式来访问
      

  34.   

    网上有一种ffmpeg+mencoder的方法,但是mencoder转换不成功,转换命令也不知道是不是跟ffmpeg一样。我写成一样,就转换失败。