打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
视频格式转化为FLV (C
        在上次随笔 Asp.net FMS 开发视频网站 中,好多朋友提到其他视频格式转化成FLV格式的问题,经过网上搜索资料研习整理,现经我的一点思路分享给大家:
        我添加了一个转换FLV工程 VideoConvert:

         1。配置文件里添加
         

 1
 <appSettings>
 2

 3
    
<!--convert tools path-->
 4
    
<add key="FfmpegPath" value="D:\tools\"/>    
 5

 6
    
<!-- setting -->
 7
    
<add key="ThreadCount" value="5" />
 8
    
<add key="BatchSize" value="10" />
 9
    
<add key="QueueTimeout" value="20" />
10
    
<add key="TransactionTimeout" value="30" />
11
  
</appSettings>

        2。添加一个接口 

 1
using System;
 2
using System.Collections.Generic;
 3
using System.Text;
 4

 5
namespace VideoConvert
 6
{
 7
    
public interface IConvert
 8
    
{
 9

10
        
/// <summary>
11
        
/// 将视频文件转换为Flv格式
12
        
/// </summary>
13
        
/// <param name="sourceFile">要转换的文件</param>
14
        
/// <returns></returns>

15
        bool Convert(string sourceFile);
16

17

18

19
        
/// <summary>
20
        
/// 获取缩略图
21
        
/// </summary>
22
        
/// <param name="sourceFile"></param>
23
        
/// <returns></returns>

24
        bool GetSmallImage(string sourceFile);
25
       
26

27
    }

28
}

29

3。转换工具设定继承 IConvert


 1
using System;
 2
using System.Collections.Generic;
 3
using System.Text;
 4
using System.Configuration;
 5

 6

 7
namespace VideoConvert
 8
{
 9
    
public class FfmpegConvert : IConvert
10
    
{
11

12

13
        
/// <summary>
14
        
/// 转换软件所在的路径
15
        
/// </summary>

16
        private string ConvertTool = ConfigurationManager.AppSettings["FfmpegPath"+ "ffmpeg.exe";
17

18

19
        
/// <summary>
20
        
/// 构造函数
21
        
/// </summary>

22
        public FfmpegConvert()
23
        
{
24

25
        }

26

27

28
        
/// <summary>
29
        
/// 将视频文件转换为Flv格式
30
        
/// </summary>
31
        
/// <param name="sourceFile">要转换的文件</param>
32
        
/// <returns></returns>

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
        
/// <summary>
60
        
/// 获取缩略图
61
        
/// </summary>
62
        
/// <param name="sourceFile"></param>
63
        
/// <returns></returns>

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.


  1
using System;
  2
using System.Collections.Generic;
  3
using System.Configuration;
  4
using System.Text;
  5
using System.Threading;
  6
using System.Transactions;
  7
using VideoConvert;
  8

  9
namespace 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
        
/// <summary>
 64
        
/// Convert 
 65
        
/// </summary>
 66
        
/// <returns></returns>

 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来实现转换。如果有问题请和我联系。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
DotNet动态创建类
C#线程学习笔记七:Task详细用法
C#中Timer使用及解决重入问题
Youtube技术原理
C# 对文件与文件夹的操作 -- 删除、移动与复制
dotNET Core 3.X 依赖注入
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服