设为首页
加入收藏
站内地图
旧版入口
首 页
新闻资讯
SEO研究
SEO查询
网站运营
站长学院
赚钱联盟
链接交换
下载中心
搜优客论坛
网页制作
网络编程
数据库
图形图像
操作系统
网络应用
当前位置:
首页
>
站长学院
>
网络编程
>
ASP.NET
截取视频文件第一桢的图片和转换视频格式文件为flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)
作者:
佚名
出处:
网络转载
时间:
11-04
点击:
内容载入中...
前段时间写过一篇抓取视频文件中图片的帖子,如下
痛并努力着-在ASP.net中如何从视频文件中抓取一桢并生成图像文件
另外一种方法是采用ffmpeg解码器,来实现如功能。
代码如下:
1
public
class
CatchFlv
2
{
3
public
CatchFlv()
4
{
5
}
6
/**/
///
<summary>
7
///
@从视频文件截图,生成在视频文件所在文件夹
8
///
支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
9
///
在Web.Config 中需要两个前置配置项:
10
///
1.ffmpeg.exe文件的路径
11
///
<add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />
12
///
2.截图的尺寸大小
13
///
<add key="CatchFlvImgSize" value="140x110" />
14
///
3.视频处理程序ffmpeg.exe
15
///
</summary>
16
///
<param name="vFileName">
视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi
</param>
17
///
<returns>
成功:返回图片绝对/相对地址; 失败:返回空字符串
</returns>
18
public
static
string
CatchImg(
string
vFileName)
19
{
20
try
21
{
22
string
ffmpeg
=
System.Configuration.ConfigurationSettings.AppSettings[
"
ffmpeg
"
];
23
ffmpeg
=
HttpContext.Current.Server.MapPath(ffmpeg);
24
25
if
((
!
System.IO.File.Exists(ffmpeg))
||
(
!
System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(vFileName))))
26
{
27
return
""
;
28
}
29
30
//
获得图片相对路径/最后存储到数据库的路径,如:/Web/FlvFile/User1/00001.jpg
31
string
flv_img
=
System.IO.Path.ChangeExtension(vFileName,
"
.jpg
"
);
32
33
//
图片绝对路径,如:D:\Video\Web\FlvFile\User1\0001.jpg
34
string
flv_img_p
=
HttpContext.Current.Server.MapPath(flv_img);
35
36
//
截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="140x110" />
37
string
FlvImgSize
=
System.Configuration.ConfigurationSettings.AppSettings[
"
CatchFlvImgSize
"
];
38
39
System.Diagnostics.ProcessStartInfo startInfo
=
new
System.Diagnostics.ProcessStartInfo(ffmpeg);
40
startInfo.WindowStyle
=
System.Diagnostics.ProcessWindowStyle.Normal;
41
42
//
此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
43
startInfo.Arguments
=
"
-i
"
+
System.Web.HttpContext.Current.Server.MapPath(vFileName)
+
"
-y -f image2 -t 0.001 -s
"
+
FlvImgSize
+
"
"
+
flv_img_p;
44
try
45
{
46
System.Diagnostics.Process.Start(startInfo);
47
}
48
catch
49
{
50
return
""
;
51
}
52
System.Threading.Thread.Sleep(
4000
);
53
/**/
///
注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;
54
if
(System.IO.File.Exists(flv_img_p))
55
{
56
return
flv_img;
57
}
58
return
""
;
59
}
60
catch
61
{
62
return
""
;
63
}
64
65
}
66
67
/**/
///
<summary>
68
///
@视频文件格式转换,生成在视频文件所在文件夹
69
///
支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
70
///
在Web.Config 中需要两个前置配置项:
71
///
1.ffmpeg.exe文件的路径
72
///
<add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />
73
///
2.截图的尺寸大小
74
///
<add key="CatchFlvSize" value="240x180" />
75
///
3.视频处理程序ffmpeg.exe
76
///
</summary>
77
///
<param name="vFileName">
视频文件绝对或相对地址,如:(..)/Web/FlvFile/User1/001.avi
</param>
78
///
<returns>
成功:返回flv文件绝对/相对地址; 失败:返回空字符串
</returns>
79
public
static
string
ChangeMediaFormat(
string
vFileName)
80
{
81
try
82
{
83
string
ffmpeg
=
System.Configuration.ConfigurationSettings.AppSettings[
"
ffmpeg
"
];
84
string
wks_url
=
System.Configuration.ConfigurationSettings.AppSettings[
"
wks_local
"
];
85
ffmpeg
=
wks_url
+
ffmpeg;
86
if
((
!
System.IO.File.Exists(ffmpeg))
||
(
!
System.IO.File.Exists(wks_url
+
vFileName)))
87
{
88
return
""
;
89
}
90
91
string
flv_fot
=
System.IO.Path.ChangeExtension(vFileName,
"
.flv
"
);
92
string
flv_fot_p
=
wks_url
+
flv_fot;
93
94
//
尺寸大小,配置在Web.Config中,如:<add key="CatchFlvSize" value="240x180" />
95
string
FlvImgSize
=
System.Configuration.ConfigurationSettings.AppSettings[
"
CatchFlvSize
"
];
96
97
System.Diagnostics.ProcessStartInfo startInfo
=
new
System.Diagnostics.ProcessStartInfo(ffmpeg);
98
startInfo.WindowStyle
=
System.Diagnostics.ProcessWindowStyle.Normal;
99
100
//
此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过
101
startInfo.Arguments
=
"
-i
"
+
wks_url
+
vFileName
+
"
-ab 56 -ar 22050 -b 500 -r 15 -s
"
+
FlvImgSize
+
"
"
+
flv_fot_p;
102
103
try
104
{
105
System.Diagnostics.Process.Start(startInfo);
106
}
107
catch
108
{
109
return
""
;
110
}
111
112
/**/
///
注意:文件格式转换成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;
113
System.Threading.Thread.Sleep(
6000
);
114
if
(System.IO.File.Exists(flv_fot_p))
115
{
116
WKS.Common.ImagesSet.DeleteOleImg(wks_url
+
vFileName);
117
return
flv_fot;
118
}
119
120
return
""
;
121
}
122
catch
123
{
124
return
""
;
125
}
126
}
127
}
128
但是,这种方法不知道ffmpeg什么时候生成结果,生成什么样的结果,因此也存在一定局限性.
收藏本文:
【
大
中
小
】【
打印页面
】【推荐给朋友】【
关闭窗口
】
<< 上一篇 :
hash是如何处理冲突的
>> 下一篇 :
从gif动画图像中导出桢的方法实现
相关新闻
·
sql2005的xml字段类型在.net中的应用1
·
一個Ajax.NET的查詢實例
·
最佳ASP.NET编程习惯
·
利用ASP.NET框架创建网站登陆
·
格式化DataGrid的例子【将数据源中的0,1值
·
一个不被flash、select、activex遮挡,跨fr
·
在ASP.NET中实现多文件上传
·
解析.Net框架下的XML编程技术
最新资讯
·
ASP.NET、JSP及PHP之间的抉择
·
带你走进ASP.NET(1)
·
带你走进ASP.NET(2)
·
ASP.NET效率陷阱之——Attributes
·
ASP.NET技巧:DataGrid传统分页方式
·
asp.NET自定义服务器控件内部细节
·
ASP.NET 2.0高级数据处理之数据绑定
·
ASP.NET立即上手教程(1)
站长学院
[
ASP
]
[
PHP
]
[
JSP
]
[
CGI/perl
]
[
ASP.NET
]
[
C#
]
[
XML
]
[
编程综合
]
关 键 字:
信息分类:
新闻资讯
SEO研究
网站运营
站长学院
下载中心
推荐信息
本类热点
·
ASP.NET网站开发实用代码
·
类型“GridView”的控件“GridVi
·
用window.location.href实现刷新
·
asp.net的Request对象使用方法
·
Community Server系列之十:让CS
·
ASP.net数据库连接程序实例
·
用ASP.NET开发wap的开发心得
·
.net2.0邮件发送代码
·
三层嵌套gridview 的折叠展开
·
asp.net图片加水印