[转]截取视频文件第一桢的图片和转换视频格式文件为flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)

前段时间写过一篇抓取视频文件中图片的帖子,如下痛并努力着-在asp.net中如何从视频文件中抓取一桢并生成图像文件
另外一种方法是采用ffmpeg解码器,来实现如功能。
代码如下:


  public   class  CatchFlv
    
{
       
public CatchFlv()
       
{
       }

       
/**//// <summary>
       
/// @从视频文件截图,生成在视频文件所在文件夹
       
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
       
/// 在Web.Config 中需要两个前置配置项:
       
/// 1.ffmpeg.exe文件的路径
       
/// <add key="ffmpeg" value="/thread/ffmpeg/ffmpeg.exe" />
       
/// 2.截图的尺寸大小
       
/// <add key="CatchFlvImgSize" value="140x110" />
       
/// 3.视频处理程序ffmpeg.exe
       
/// </summary>
       
/// <param name="vFileName">视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi</param> 
       
/// <returns>成功:返回图片绝对/相对地址; 失败:返回空字符串</returns>

       public static string CatchImg(string vFileName)
       
{
           
try
           
{
               
string ffmpeg = System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"];
               ffmpeg 
= HttpContext.Current.Server.MapPath(ffmpeg);

               
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(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="140x110" /> 
               string FlvImgSize = System.Configuration.ConfigurationSettings.AppSettings["CatchFlvImgSize"];

               System.Diagnostics.ProcessStartInfo startInfo 
= new System.Diagnostics.ProcessStartInfo(ffmpeg);
               startInfo.WindowStyle 
= System.Diagnostics.ProcessWindowStyle.Normal;

               
//此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
               startInfo.Arguments = " -i " + System.Web.HttpContext.Current.Server.MapPath(vFileName) + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img_p;
               
try
               
{
                   System.Diagnostics.Process.Start(startInfo);
               }

               
catch
               
{
                   
return "";
               }

               System.Threading.Thread.Sleep(
4000);
               
/**////注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;
               if (System.IO.File.Exists(flv_img_p))
               
{
                   
return flv_img;
               }

               
return "";
           }

           
catch
           
{
               
return "";
           }


       }


       
/**//// <summary>
       
/// @视频文件格式转换,生成在视频文件所在文件夹
       
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
       
/// 在Web.Config 中需要两个前置配置项:
       
/// 1.ffmpeg.exe文件的路径
       
/// <add key="ffmpeg" value="/thread/ffmpeg/ffmpeg.exe" />
       
/// 2.截图的尺寸大小
       
/// <add key="CatchFlvSize" value="240x180" /> 
       
/// 3.视频处理程序ffmpeg.exe
       
/// </summary>
       
/// <param name="vFileName">视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi</param> 
       
/// <returns>成功:返回flv文件绝对/相对地址; 失败:返回空字符串</returns>

       public static string ChangeMediaFormat(string vFileName)
       
{
           
try
           
{
               
string ffmpeg = System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"];
               
string wks_url = System.Configuration.ConfigurationSettings.AppSettings["wks_local"];
               ffmpeg 
= wks_url+ffmpeg;
               
if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(wks_url+vFileName)))
               
{
                   
return "";
               }


               
string flv_fot = System.IO.Path.ChangeExtension(vFileName, ".flv");
               
string flv_fot_p = wks_url+flv_fot;

               
//尺寸大小,配置在Web.Config中,如:<add key="CatchFlvSize" value="240x180" /> 
               string FlvImgSize = System.Configuration.ConfigurationSettings.AppSettings["CatchFlvSize"];

               System.Diagnostics.ProcessStartInfo startInfo 
= new System.Diagnostics.ProcessStartInfo(ffmpeg);
               startInfo.WindowStyle 
= System.Diagnostics.ProcessWindowStyle.Normal;

               
//此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
               startInfo.Arguments = " -i " + wks_url+vFileName + " -ab 56 -ar 22050 -b 500 -r 15 -s  " + FlvImgSize + " " + flv_fot_p;

               
try
               
{
                   System.Diagnostics.Process.Start(startInfo);
               }

               
catch
               
{
                   
return "";
               }


               
/**////注意:文件格式转换成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;
               System.Threading.Thread.Sleep(6000);
               
if (System.IO.File.Exists(flv_fot_p))
               
{
                   WKS.Common.ImagesSet.DeleteOleImg(wks_url
+vFileName);
                   
return flv_fot;
               }


               
return "";
           }

           
catch
           
{
               
return "";
           }

       }
     
    }


    但是,这种方法不知道ffmpeg什么时候生成结果,生成什么样的结果,因此也存在一定局限性.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值