截取視頻文件第一楨的圖片和轉(zhuǎn)換視頻格式文件為flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)
前段時(shí)間寫過一篇抓取視頻文件中圖片的帖子,如下痛并努力著-在asp.net中如何從視頻文件中抓取一楨并生成圖像文件
另外一種方法是采用ffmpeg解碼器,來實(shí)現(xiàn)如功能。
代碼如下:
另外一種方法是采用ffmpeg解碼器,來實(shí)現(xiàn)如功能。
代碼如下:
1
public class CatchFlv
2
{
3
public CatchFlv()
4
{
5
}
6
/// <summary>
7
/// @從視頻文件截圖,生成在視頻文件所在文件夾
8
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
9
/// 在Web.Config 中需要兩個(gè)前置配置項(xiàng):
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">視頻文件絕對(duì)或相對(duì)地址,如:(..)/Web/FlvFile/User1/001.avi</param>
17
/// <returns>成功:返回圖片絕對(duì)/相對(duì)地址; 失敗:返回空字符串</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
//獲得圖片相對(duì)路徑/最后存儲(chǔ)到數(shù)據(jù)庫的路徑,如:/Web/FlvFile/User1/00001.jpg
31
string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg");
32
33
//圖片絕對(duì)路徑,如: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文件需要的參數(shù)即可,此處命令在ffmpeg 0.4.9調(diào)試通過
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
///注意:圖片截取成功后,數(shù)據(jù)由內(nèi)存緩存寫到磁盤需要時(shí)間較長(zhǎng),大概在3,4秒甚至更長(zhǎng);
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
/// @視頻文件格式轉(zhuǎn)換,生成在視頻文件所在文件夾
69
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv
70
/// 在Web.Config 中需要兩個(gè)前置配置項(xiàng):
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">視頻文件絕對(duì)或相對(duì)地址,如:(..)/Web/FlvFile/User1/001.avi</param>
78
/// <returns>成功:返回flv文件絕對(duì)/相對(duì)地址; 失敗:返回空字符串</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文件需要的參數(shù)即可,此處命令在ffmpeg 0.4.9調(diào)試通過
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
///注意:文件格式轉(zhuǎn)換成功后,數(shù)據(jù)由內(nèi)存緩存寫到磁盤需要時(shí)間較長(zhǎng),大概在3,4秒甚至更長(zhǎng);
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什么時(shí)候生成結(jié)果,生成什么樣的結(jié)果,因此也存在一定局限性.
public class CatchFlv2
{3
public CatchFlv()4
{5
}6
/// <summary>7
/// @從視頻文件截圖,生成在視頻文件所在文件夾8
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv9
/// 在Web.Config 中需要兩個(gè)前置配置項(xiàng):10
/// 1.ffmpeg.exe文件的路徑11
/// <add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />12
/// 2.截圖的尺寸大小13
/// <add key="CatchFlvImgSize" value="140x110" />14
/// 3.視頻處理程序ffmpeg.exe15
/// </summary>16
/// <param name="vFileName">視頻文件絕對(duì)或相對(duì)地址,如:(..)/Web/FlvFile/User1/001.avi</param> 17
/// <returns>成功:返回圖片絕對(duì)/相對(duì)地址; 失敗:返回空字符串</returns>18
public static string CatchImg(string vFileName)19
{20
try21
{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
//獲得圖片相對(duì)路徑/最后存儲(chǔ)到數(shù)據(jù)庫的路徑,如:/Web/FlvFile/User1/00001.jpg31
string flv_img = System.IO.Path.ChangeExtension(vFileName, ".jpg");32

33
//圖片絕對(duì)路徑,如:D:\Video\Web\FlvFile\User1\0001.jpg34
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文件需要的參數(shù)即可,此處命令在ffmpeg 0.4.9調(diào)試通過43
startInfo.Arguments = " -i " + System.Web.HttpContext.Current.Server.MapPath(vFileName) + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img_p;44
try45
{46
System.Diagnostics.Process.Start(startInfo);47
}48
catch49
{50
return "";51
}52
System.Threading.Thread.Sleep(4000);53
///注意:圖片截取成功后,數(shù)據(jù)由內(nèi)存緩存寫到磁盤需要時(shí)間較長(zhǎng),大概在3,4秒甚至更長(zhǎng);54
if (System.IO.File.Exists(flv_img_p))55
{56
return flv_img;57
}58
return "";59
}60
catch61
{62
return "";63
}64

65
}66

67
/// <summary>68
/// @視頻文件格式轉(zhuǎn)換,生成在視頻文件所在文件夾69
/// 支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv70
/// 在Web.Config 中需要兩個(gè)前置配置項(xiàng):71
/// 1.ffmpeg.exe文件的路徑72
/// <add key="ffmpeg" value="\thread\ffmpeg\ffmpeg.exe" />73
/// 2.截圖的尺寸大小74
/// <add key="CatchFlvSize" value="240x180" /> 75
/// 3.視頻處理程序ffmpeg.exe76
/// </summary>77
/// <param name="vFileName">視頻文件絕對(duì)或相對(duì)地址,如:(..)/Web/FlvFile/User1/001.avi</param> 78
/// <returns>成功:返回flv文件絕對(duì)/相對(duì)地址; 失敗:返回空字符串</returns>79
public static string ChangeMediaFormat(string vFileName)80
{81
try82
{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文件需要的參數(shù)即可,此處命令在ffmpeg 0.4.9調(diào)試通過101
startInfo.Arguments = " -i " + wks_url+vFileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + FlvImgSize + " " + flv_fot_p;102

103
try104
{105
System.Diagnostics.Process.Start(startInfo);106
}107
catch108
{109
return "";110
}111

112
///注意:文件格式轉(zhuǎn)換成功后,數(shù)據(jù)由內(nèi)存緩存寫到磁盤需要時(shí)間較長(zhǎng),大概在3,4秒甚至更長(zhǎng);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
catch123
{124
return "";125
}126
} 127
}128
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。


浙公網(wǎng)安備 33010602011771號(hào)