请问如果在上传视频(flv文件)的同时创建该视频的缩略图?可以只告诉我创建视频的缩略图的方法。我在网上搜索了一下,看到有需要调用ffmpeg.exe可以给视频生成缩略图,但是没有成功,并且不知道用C#怎么实现。希望有人能给一份能成功生成的C#代码,谢谢。

解决方案 »

  1.   

    用这个软件 Video GIF/AVI ThumbCell Creater  可以把视频生成缩略图~
      

  2.   


    #region 截图
    //fileName flv文件地址
    //imgFile 输出的图片地址
    public string CatchImg(string fileName,string imgFile)
    {
    //
    string ffmpeg = VideoDecoder.ffMpeg; //ffmpeg执行文件的路径
    //
    string flv_img =imgFile+".jpg";
    //
    string FlvImgSize = VideoDecoder.sizeOfImg;//生成的图片分辨率 240x180
    //
    System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
    ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    //
    ImgstartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + FlvImgSize + "   " + flv_img;
    try
    {
    System.Diagnostics.Process.Start(ImgstartInfo);
    }
    catch
    {
    return "";
    }
    //
    if (System.IO.File.Exists(flv_img))
    {
    return flv_img;
    } return "";
    }
    #endregion
      

  3.   

    你好clal :
    请问VideoDecoder这个是怎么来的?
      

  4.   

    这个函数就是我从VideoDecoder这个类从copy出来的
    那几个地方,你改成自己的文件位置就行了
      

  5.   

    你看看这个
    http://topic.csdn.net/u/20080527/12/c03d32b6-36b8-4838-b706-cba1b91df4de.html
    是这个类的全部
    这是以前写的不完整方案
    包括解码生成flv,抓图,用flvtool2.exe读取及标记flv文件信息
      

  6.   


    那请问我怎么引用VideoDecoder这个类?
      

  7.   

    总算把你写的代码看明白了。VideoDecoder改成我自己的就行了
      

  8.   

    我改成:
    public string CatchImg(string fileName, string imgFile)
        {
            //
            string ffmpeg = Server.MapPath("ffmpeg.exe"); //ffmpeg执行文件的路径
            //
            string flv_img = imgFile;
            //
            string FlvImgSize = "240x180";//生成的图片分辨率 240x180
            //
            System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
            ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            //
            ImgstartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + FlvImgSize + "   " + flv_img;
            try
            {
                System.Diagnostics.Process.Start(ImgstartInfo);
            }
            catch
            {
                return "";
            }
            //
            if (System.IO.File.Exists(flv_img))
            {
                return flv_img;
            }        return "";
        }执行没问题,但是图片还是没有生成成功。请问是什么原因?
      

  9.   

    最大可能是目录没有写入权限
    把 try 去掉吧
    看看出了什么错误
    事件查看器 里有没有出错说明
      

  10.   

    没有报错呢,imgFile是等于d:\aaa.jpg,
    执行完之后在D盘没有发现aaa.jpg文件。
    会不会是ffmpeg.exe版本问题?
      

  11.   

    刚才改了下路径将imgFile=d:\\aaa\\aaa.jpg
    aaa文件夹给了完全的权限,还是不行。
      

  12.   

    调过几次了,路径我一个个都试了,没有问题。线程启动了,就是ffmpeg.exe没有生成图片。
      

  13.   

    我使用的ffmpeg.exe还有pthreadGC2.dll
    pthreadGC2.dll是2.9.0.0
      

  14.   


    汗pthreadGC2.dll版本是一样的,为什么我这不行呢?
      

  15.   

    看看IIS中的 Web 服务扩展打开试试

    进程的窗口样式改成 System.Diagnostics.ProcessWindowStyle.Normal;
    直接从Cmd窗口看效果
      

  16.   

    ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;改了,但是CMD窗口一闪就过了。图片还是没生成.
      

  17.   

    图片生成应该没有那么快
    ImgstartInfo.Arguments = "   -i   " + fileName + "  -y  -f  image2   -ss 2 -vframes 1  -s   " + FlvImgSize + "   " + flv_img;
    注意这个中间的空格
    另外你先手动在cmd里把整个命令运行一次下班回家先
      

  18.   

    http://topic.csdn.net/u/20070212/11/16EE743D-32D8-4252-B5D6-26DAA1082FBE.html
    http://topic.csdn.net/u/20070620/13/4BE90E90-95FA-464D-A4F3-85CC694D5655.html
      

  19.   

    我试了一下,原来是路径问题,如果用Server.MapPath的方法去路径是不行的,非要用绝对路径。例如:d:\\ffmpeg.exe
      

  20.   

    应该不会啊
    Server.MapPath转换后就是绝对路径
    我之前的方法里也是用Server.MapPath
    你确定Server.MapPath后的路径和你写的绝对路径是一样吗?
      

  21.   

    是一样的,flv文件不能用Server.MapPath,其他的可以,真是奇怪。
      

  22.   


    我那个项目,现在还在运行
    就是用Server.MapPath的
      

  23.   

    最快的方法就是了解flv的编码,在上传的时候通过stream读取
      

  24.   

    用ffmpeg 去转换根本 不行,百分之99的服务器都拒绝执行EXE程序