视频转成flv格式

简介:

最近完成了这个小Demo,来分享一下!
上面给了我两天时间,来完成这个小功能
于时我花了半天时间从网络上到处鄱资料,又花了半天时间调试代码,成功之后,终于有了以下一点的经验之谈:

这里讲一下重要的:
1.用到两个工具,一个是ffmpeg.exe,另一个是mencoder.exe
ffmpeg最新版本的下载地址:http://ffdshow.faireal.net/mirror/ffmpeg/
Mencoder新版本的下载地址:http://www5.mplayerhq.hu/MPlayer/releases/win32/

这里有一个重点,网上的文章都没讲到,所以造成有些人运行后没反应,原因是上面路径的下载,有很多版本,不同的版本可能个别参数不同,而网上的文章所用的参数都是用很早的版本写的,所以会造成运行后因参数错误而没有效果
简单处理是:把网上参数在cmd命令行执行一下,这时命令行会报哪个参数错误,把它删了即可!

2.判断处理成功与失败或是进度是否完成,从异步获取的输出信息判断[包括获取原视频的宽与高]
这里重点在两个委托事件中,详情见以下几行代码

ExpandedBlockStart.gif
 1 
 2  private  void StartProcess(string tool)
 3         {
 4             StartProcess(tool, false);
 5         }
 6         private  void StartProcess(string tool,bool onlyCheckInfo)
 7         {
 8             System.Diagnostics.Process p = new System.Diagnostics.Process();
 9             p.StartInfo.FileName = tool;
10             p.StartInfo.Arguments = commandPara;
11             p.StartInfo.UseShellExecute = false;
12             p.StartInfo.RedirectStandardInput = true;
13             p.StartInfo.RedirectStandardOutput = true;
14             p.StartInfo.RedirectStandardError = true;
15             p.StartInfo.CreateNoWindow = false;
16             p.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_OutputDataReceived);
17             if (onlyCheckInfo)//只检测文件是否可转换与获到内部宽与高
18             {
19                 p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_CheckInfoDataReceived);
20             }
21             else
22             {
23                 p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_ErrorDataReceived);
24             }
25             //开始执行 
26             try
27             {
28                 p.Start();
29                 p.BeginOutputReadLine();
30                 p.BeginErrorReadLine();
31                 p.WaitForExit();
32             }
33             catch (Exception err)
34             {
35                 Console.WriteLine(err.Message);
36             }
37             finally
38             {
39                 p.Close();
40             }
41         }
42         void p_CheckInfoDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
43         {
44             if (!string.IsNullOrEmpty(e.Data))
45             {
46                 if (e.Data.Contains("Stream"&& e.Data.Contains("Video:"))//设置原视频窗口大小作为flv视频的宽与高
47                 {
48                     Match match = Regex.Match(e.Data, @", (\d+)x(\d+)");
49                     if (match != null)
50                     {
51                         videoWidth = match.Groups[1].Value;
52                         videoHeight = match.Groups[2].Value;
53                     }
54                 }
55                 else if (e.Data.Contains("could not find codec parameters"))//ffmpeg转换失败
56                 {
57                     isCanChangeToFlv = false;
58                     Program.SetDataBase(id, 1, count + 1);
59                 }
60             }
61 
62         }
63 
64          void p_ErrorDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
65         {
66             if (!string.IsNullOrEmpty(e.Data))
67             {
68                 if (e.Data.Contains("video:"&& e.Data.Contains("muxing overhead"))//ffmpeg转换完成
69                 {
70                     Program.SetDataBase(id, 2, count + 1);
71                     Console.WriteLine("转换完成");
72                 }
73                 Console.WriteLine(e.Data);
74             }
75             
76         }
77 
78          void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
79         {
80             if (!string.IsNullOrEmpty(e.Data))
81             {
82                 if (e.Data.Contains("Writing index"))//mencoder转换完成
83                 {
84                     Program.SetDataBase(id, 2, count + 1);
85                     Console.WriteLine("转换完成");
86                 }
87                 //else if (e.Data.Contains("Exiting"))//mencoder转换失败
88                 //{
89                 //    Console.WriteLine("转换失败");
90                 //}
91                 Console.WriteLine(e.Data);
92             }
93         }
94 
95 


本文只讲重点,请结合网络其它文章与本文即可!


版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2008/10/15/1311410.html

目录
相关文章
|
1月前
|
Java
格式
局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样 4.内存的位置不一样(了解) 局部变量:位于栈内存 成员变量:位于堆内存 5生命周期不一样(了解) 局部变量:随着方法进栈而诞生,随着方法出栈而消失 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失 当方法的局部变量和类的成员变量重名
15 0
|
6月前
|
流计算 计算机视觉 索引
使用ffmpeg将视频转成HLS(m3u8)格式
HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。 因为HLS协议是将视频切分成很多小的ts片段,这些小片段很适合放到cdn上,有很多视频文章都使用了hls格式传输视频。今天我在这里教大家如何用ffmpeg将mp4格式的视频转为HLS(m3u8)格式。
304 0
|
9月前
|
Linux 计算机视觉 iOS开发
使用ffmpeg将MP4转换为WebM格式
使用ffmpeg将MP4转换为WebM格式
853 2
|
9月前
|
存储 编解码 算法
|
存储 编解码 API
FLV格式解析
FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧、封装播放简单等特点,使其很适合在网络上进行应用,目前主流的视频网站无一例外地使用了FLV格式。另外由于当前浏览器与Flash Player紧密的结合,使得网页播放FLV视频轻而易举,也是FLV流行的原因之一。
193 0
|
存储 编解码 算法
MP4格式解析
MP4视频文件封装格式是基于QuickTime容器格式定义的,因此参考QuickTime的格式定义对理解MP4文件格式很有帮助。MP4文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。同时,MP4也支持流媒体。MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括:M4V, 3GP, F4V等。
219 0
|
编解码 Linux vr&ar
如何将mp3文件转pcma格式或PCM格式的wav文件
如何将mp3文件转pcma格式或PCM格式的wav文件
|
编解码
ffmpeg编码格式转换
ffmpeg编码格式转换
372 0
1473. A + B 格式
1473. A + B 格式
70 0
|
存储 编解码 容器
你真的懂 MP4 格式吗?
MP4 文件格式重点全解析!
你真的懂 MP4 格式吗?