视频格式转化为FLV (C

来源:百度文库 编辑:神马文学网 时间:2024/04/27 16:44:56
视频格式转化为FLV (C#)
在上次随笔Asp.net FMS 开发视频网站 中,好多朋友提到其他视频格式转化成FLV格式的问题,经过网上搜索资料研习整理,现经我的一点思路分享给大家:
我添加了一个转换FLV工程 VideoConvert:
1。配置文件里添加
web.config
1 
2
3    
4    
5
6    
7    
8    
9    
10    
11  

2。添加一个接口
IConvert
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace VideoConvert
6{
7    public interface IConvert
8    {
9
10        /**//// 
11        /// 将视频文件转换为Flv格式
12        /// 

13        /// 要转换的文件
14        /// 
15        bool Convert(string sourceFile);
16
17
18
19        /**//// 
20        /// 获取缩略图
21        /// 

22        /// 
23        /// 
24        bool GetSmallImage(string sourceFile);
25
26
27    }
28}
29
3。转换工具设定继承 IConvert
FfmpegConvert
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Configuration;
5
6
7namespace VideoConvert
8{
9    public class FfmpegConvert : IConvert
10    {
11
12
13        /**//// 
14        /// 转换软件所在的路径
15        /// 

16        private string ConvertTool = ConfigurationManager.AppSettings["FfmpegPath"] + "ffmpeg.exe";
17
18
19        /**//// 
20        /// 构造函数
21        /// 

22        public FfmpegConvert()
23        {
24
25        }
26
27
28        /**//// 
29        /// 将视频文件转换为Flv格式
30        /// 

31        /// 要转换的文件
32        /// 
33        public bool Convert(string sourceFile)
34        {
35            try
36            {
37                //文件名是否为空
38                if (string.IsNullOrEmpty(sourceFile)) return false;
39                //检测文件是否存在
40
41
42                string TargetFile = sourceFile.Substring(0, sourceFile.Length - 4) + ".flv";
43                string Argu = @"-i " + sourceFile + " -ab 56 -ar 22050 -b 500 -r 15 -s 480x360 " + TargetFile;
44
45                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ConvertTool, Argu);
46                System.Diagnostics.Process.Start(startInfo);
47                System.Threading.Thread.Sleep(6000);
48                return true;
49
50            }
51            catch (Exception exp)
52            {
53                throw exp;
54            }
55
56        }
57
58
59        /**//// 
60        /// 获取缩略图
61        /// 

62        /// 
63        /// 
64        public bool GetSmallImage(string sourceFile)
65        {
66
67            //文件名是否为空
68            if (string.IsNullOrEmpty(sourceFile)) return false;
69            //检测文件是否存在
70
71            try
72            {
73                string TargetFile = sourceFile.Substring(0, sourceFile.Length - 4) + ".jpg";
74                string Argu = @"-i " + sourceFile + " -y -f image2 -ss 08.010 -t 0.001 -s 352x240 " + TargetFile;
75                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ConvertTool, Argu);
76                System.Diagnostics.Process.Start(startInfo);
77                System.Threading.Thread.Sleep(6000);
78
79
80                //必须等待进行完成后才能返回结果
81
82
83                return true;
84
85            }
86            catch (Exception exp)
87            {
88                throw exp;
89            }
90
91        }
92
93    }
94}
95
4.
program
1using System;
2using System.Collections.Generic;
3using System.Configuration;
4using System.Text;
5using System.Threading;
6using System.Transactions;
7using VideoConvert;
8
9namespace VideoConvert
10{
11    class Program
12    {
13
14        //threadCount
15        private static int threadCount = int.Parse(ConfigurationManager.AppSettings["ThreadCount"]);
16
17        private static IConvert tool = new FfmpegConvert();
18
19        //finished count
20        private static int completeCount = 0;
21
22        static void Main(string[] args)
23        {
24
25
26            Thread workTicketThread;
27            Thread[] workerThreads = new Thread[threadCount];
28
29            for (int i = 0; i < threadCount; i++)
30            {
31
32                workTicketThread = new Thread(new ThreadStart(ProcessVideo));
33
34                // Make this a background thread, so it will terminate when the main thread/process is de-activated
35                workTicketThread.IsBackground = true;
36                workTicketThread.SetApartmentState(ApartmentState.STA);
37
38                // Start the Work
39                workTicketThread.Start();
40                workerThreads[i] = workTicketThread;
41            }
42
43            Console.WriteLine("Converting begin. press Enter stop");
44            Console.ReadLine();
45            Console.WriteLine("cancel");
46
47            //abort all threads
48            for (int i = 0; i < workerThreads.Length; i++)
49            {
50
51                workerThreads[i].Abort();
52            }
53
54            Console.WriteLine();
55            Console.WriteLine(" Processed" + completeCount + "video files");
56            Console.WriteLine(" Process compeleted. press Enter to exit");
57            Console.ReadLine();
58
59
60        }
61
62
63        /**//// 
64        /// Convert
65        /// 

66        /// 
67        private static void ProcessVideo()
68        {
69
70
71            while (true)
72            {
73
74
75
76                    if (!string.IsNullOrEmpty(waitConvertFile))
77                    {
78                        //Convert
79                        Console.WriteLine("start to convert file:" + waitConvertFile + "");
80                        try
81                        {
82                            if (tool.Convert(waitConvertFile.PhysicalPath) && tool.GetSmallImage(waitConvertFile.PhysicalPath))
83                            {
84                                completeCount++;
85
86                                //Change waitConvertFile status if need
87
88                            }
89                        }
90                        catch (Exception exp)
91                        {
92                            //setting Convert failure
93                            Console.WriteLine("文件" + waitConvertFile.VideoID + "Convert failure");
94                        }
95                        Console.WriteLine("文件" + waitConvertFile.VideoID + "Convert ending");
96                        Thread.Sleep(1000);
97                    }
98                    Thread.Sleep(1000 * 60);
99
100
101
102
103
104            }
105
106
107        }
108    }
109}
通过四步,我们视频转换工程就创建完了,这里的主要思路是服务器端调用视频转换工具 ffmpeg.exe,设置参数,通过Main来实现转换。如果有问题请和我联系。