`
hz_chenwenbiao
  • 浏览: 1010174 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FLV视频转换的利器 - ffmpeg.exe和mencoder(转)

阅读更多

文章1:
大家应该都知道Youtobe、Google Video之类视频分享网站。他们的视频全部是使用Flash播放,而通过探索实际地址,会发现下载回来的东西都是Flash支持的FLV格式。这种格式的视频,播放和转换是非常麻烦的。但是,有一个源于Linux的工具软件ffmpeg可以轻易地实现FLV向其它格式(avi(mpeg4)、asf、mpeg)的转换或者将其它格式转换为flv。   =OD'GuQ   
ffmpeg作为Linux下的LGPL开源程序,在Windows下编译需要特殊的工具。我这里提供的ffmpeg.exe是2004年的旧版本,使用MinGW编译,只有一个可执行文件,可直接运行(命令行程序)。
  b<td|kk 
 
FLV向其它格式(avi(mpeg4)、asf、mpeg)转换的简易方法:(圆括号内必填,方括号内可选)
  khOG Kh* 
 
转换成wmv/asf
  JZvQCf;$ 
 
ffmpeg -i (要转换的flv文件完整路径) -f asf -vcodec (wmv1或wmv2) [-b 视频码率] -acodec mp3 [-ab 音频码率] (输出的asf/wmv文件完整路径)
  !.C1}Wf 
 
转换成mpeg1
  n Xa Os& 
 
ffmpeg -i (要转换的flv文件完整路径) -f mpeg -vcodec mpeg1video [-b 视频码率] -acodec mp2 [-ab 音频码率] (输出的mpg文件完整路径)
  =mmBjG}0{ 
 
转换成avi(msmpeg4)
  z4%EYCZ' 
 
ffmpeg -i (要转换的flv文件完整路径) -f avi -vcodec (msmpeg4或msmpeg4v1或msmpeg4v2) [-b 视频码率] -acodec mp3 [-ab 音频码率] (输出的avi文件完整路径)
  AImbKhOK' 
 


 

 

文章2:

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

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

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

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

			private  void StartProcess(string tool)
			{
				StartProcess(tool, false);
			}
	         private  void StartProcess(string tool,bool onlyCheckInfo)
	         {
	             System.Diagnostics.Process p = new System.Diagnostics.Process();
	             p.StartInfo.FileName = tool;
	             p.StartInfo.Arguments = commandPara;
	             p.StartInfo.UseShellExecute = false;
	             p.StartInfo.RedirectStandardInput = true;
	             p.StartInfo.RedirectStandardOutput = true;
	             p.StartInfo.RedirectStandardError = true;
	             p.StartInfo.CreateNoWindow = false;
	             p.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_OutputDataReceived);
	             if (onlyCheckInfo)//只检测文件是否可转换与获到内部宽与高
	             {
	                 p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_CheckInfoDataReceived);
	             }
	             else
	             {
	                 p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_ErrorDataReceived);
	             }
	             //开始执行 
	             try
	             {
	                 p.Start();
	                 p.BeginOutputReadLine();
	                 p.BeginErrorReadLine();
	                 p.WaitForExit();
	             }
	             catch (Exception err)
	             {
	                 Console.WriteLine(err.Message);
	             }
	             finally
	             {
	                 p.Close();
	             }
	         }
	         void p_CheckInfoDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
	         {
	             if (!string.IsNullOrEmpty(e.Data))
	             {
	                 if (e.Data.Contains("Stream") && e.Data.Contains("Video:"))//设置原视频窗口大小作为flv视频的宽与高
	                 {
	                     Match match = Regex.Match(e.Data, @", (\d+)x(\d+)");
	                     if (match != null)
	                     {
	                         videoWidth = match.Groups[1].Value;
	                         videoHeight = match.Groups[2].Value;
	                     }
	                 }
	                 else if (e.Data.Contains("could not find codec parameters"))//ffmpeg转换失败
	                 {
	                     isCanChangeToFlv = false;
	                     Program.SetDataBase(id, 1, count + 1);
	                 }
	             }
	 
	         }
	 
	          void p_ErrorDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
	         {
	             if (!string.IsNullOrEmpty(e.Data))
	             {
	                 if (e.Data.Contains("video:") && e.Data.Contains("muxing overhead"))//ffmpeg转换完成
	                 {
	                     Program.SetDataBase(id, 2, count + 1);
	                     Console.WriteLine("转换完成");
	                 }
	                 Console.WriteLine(e.Data);
	             }
	             
	         }
	 
	          void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
	         {
	             if (!string.IsNullOrEmpty(e.Data))
	             {
	                 if (e.Data.Contains("Writing index"))//mencoder转换完成
	                 {
	                     Program.SetDataBase(id, 2, count + 1);
	                     Console.WriteLine("转换完成");
	                 }
	                 //else if (e.Data.Contains("Exiting"))//mencoder转换失败
	                 //{
	                 //    Console.WriteLine("转换失败");
	                 //}
	                 Console.WriteLine(e.Data);
	             }
	         }
 本文只讲重点,请结合网络其它文章与本文即可!

 

文章3:

Youtube的成功,使得国内的视频网站如雨后春笋般的冒出来,前不久朋友叫我帮他写一个将各种视频格式转换成flv的程序,这里就将编写程序遇 到困难和获得的经验拿出来和大家分享一下。 1、使用引擎:ffmpeg + Mencoder 2、ffmpeg最新版本的下载地址:http://ffdshow.faireal.net/mirror/ffmpeg/ Mencoder新版本的下载地址:http://www5.mplayerhq.hu/MPlayer/releases/win32/ 3、转换速度比较:总体上ffmpeg转换的速度快于Mencoder 4、转换格式要求:rm、rmvb、r

Youtube的成功,使得国内的视频网站如雨后春笋般的冒出来,前不久朋友叫我帮他写一个将各种视频格式转换成flv的程序,这里就将编写程序遇到困难和获得的经验拿出来和大家分享一下。

1、使用引擎:ffmpeg + Mencoder
2、ffmpeg最新版本的下载地址:http://ffdshow.faireal.net/mirror/ffmpeg/
Mencoder新版本的下载地址:http://www5.mplayerhq.hu/MPlayer/releases/win32/
3、转换速度比较:总体上ffmpeg转换的速度快于Mencoder
4、转换格式要求:rm、rmvb、rt格式的文件只能用Mencoder转换,出于速度考虑我基本上都用ffmpeg转换,所以Mencoder能转换的格式我没有详细测试(哪个朋友知道,麻烦你告诉我下,我补充上去)。
5、纯音频格式只能用Mencoder进行转换。如何判断是否是纯音频格式可以通过使用命令 FFmpeg -i "文件的完整路径" 获得输出后就可以分析出来。
6、.mov格式的用ffmpeg转换出来的效果比较差,建议用Mencoder进行转换,wmv8用ffmpeg经常会有花屏产生建议用Mencoder。
7、视频按比率输出的问题:必须先获取源视频文件的宽度和高度(也是通过 FFmpeg -i "文件的完整路径" 获得输出后就可以分析出来)根据这个高度和宽度的比率来设定输出文件的尺寸。
8、 可能的难点:因为这ffmpeg 和 Mencoder都是命令行工具(当然你也可以下载源代码自己修改成com之类的),在C#只能用Process调用,前面我提过要获得输出信息(获取视 频相关信息、获取当前的转换进度、获取什么时候完成转换),必须设置process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true;然后必须通过异步编程的方式获取Process.StandardOutput和Process.StandardError的值,相关说明可 以见(ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html /frlrfSystemDiagnosticsProcessClassStandardOutputTopic.htm)(必须安装了msdn的才能 看)。

本文旨在帮助大家少走一些弯路,并不提供实际的解决方案及相关的源码下载。

有其他任何问题欢迎大家在本文章发布留言。

分享到:
评论

相关推荐

    视频转码工具ffmpeg.exe和mencoder.exe

    在提供的压缩包文件"视频转码工具ffmpeg.exe和mencoder.exe"中,包含的是这两个工具的可执行文件,用户可以直接在命令行环境下运行它们进行视频转码操作。需要注意的是,使用这些工具之前,确保系统已经安装了相应的...

    drv33260.dll drv43260.dll ffmpeg.exe mencoder.exe Pncrt.dll以及java程序

    drv33260.dll drv43260.dll ffmpeg.exe mencoder.exe Pncrt.dll以及java程序drv33260.dll drv43260.dll ffmpeg.exe mencoder.exe Pncrt.dll以及java程序drv33260.dll drv43260.dll ffmpeg.exe mencoder.exe Pncrt....

    windows32位下的ffmpeg.exe

    FFmpeg 是一个强大的开源工具,用于处理音频和视频文件,包括转换、编码、解码、分割、合并等操作。在Windows 32位系统中,FFmpeg 的可执行文件通常为 `ffmpeg.exe`,它是整个FFmpeg套件的核心组件。这个32位版本的 ...

    ffmpeg-6.1.1.tar,ffmpeg-master-latest-win64-gpl-shared

    FFmpeg 是一套能够处理多媒体数据(音频、视频、字幕等)的开源计算机程序库和命令行工具,广泛应用于音视频处理、转码、流媒体等领域1。 要使用该压缩包,通常需要以下步骤: 下载 ffmpeg-6.1.1.tar 压缩包。 ...

    ffmpeg-win-2.2.2.zip dll

    ffmpeg-win-2.2.2.zip dll 32位 avcodec-55.dll avdevice-55.dll avfilter-4.dll avformat-55.dll avutil-52.dll ffmpeg.exe 等

    ffmpeg-master-latest-win64-gpl.zip

    6. **libswscale**:用于色彩空间转换和视频尺寸调整,确保视频在不同设备和格式之间兼容。 7. **libswresample**:音频重采样库,用于处理不同采样率、位深度和通道数的音频。 8. **libavdevice**:提供与硬件...

    LAVFilters-0.75.1-Installer.exe

    lav filters 是一组基于 ffmpeg 项目中的 libavformat/libavcodec 库的 directshow 分离器和音视频解码器,几乎允许您在 directshow 播放器中播放任何格式的媒体文件!

    ffmpeg.exe+ffprobe.exe+ffplay.exe

    FFmpeg 是一个强大的开源多媒体处理工具,包含了三个主要组件:ffmpeg.exe、ffprobe.exe 和 ffplay.exe,这些都是针对 Windows 64 位平台的静态编译版本,因此在使用时无需依赖其他额外的库或软件。 1. **ffmpeg....

    qt-faststart.exe

    mp4边播变下格式转换,在cmd中,切换到所在目录,输入qt-faststart.exe a.mp4 b.mp4 即可。或者添加环境变量,然后在任意目录下转换

    ffmpeg.win32.exe

    Imageio: 'ffmpeg-win32-v3.2.4.exe' was not found on your computer; downloading it now.

    使用ffmpeg.exe将视频文件转换成flv格式

    在本场景中,我们将重点讨论如何利用`ffmpeg.exe`这个可执行文件,配合`pthreadGC2.dll`这个动态链接库,将视频文件转换为FLV(Flash Video)格式。 FLV是Adobe Systems开发的一种流行的网络流媒体格式,常用于在线...

    ffmpeg-release-essentials.zip

    1. **找到解压路径**:解压“ffmpeg-release-essentials.zip”,确保找到包含“ffmpeg.exe”和其他可执行文件的“bin”目录。 2. **设置环境变量**: - 右键点击“计算机”或“此电脑”,选择“属性”。 - 在左侧...

    ffmpeg.exe可调试用VS2019编译源码

    使用当前2020最新版ffmpeg编译好的lib包,vs2019可编译的ffmpeg.exe的源码.下载后可直接编译调试,了解ffmpeg.exe实现的原理。 打印版本号: ffmpeg version N-99305-gbc0e776 Copyright (c) 2000-2020 the FFmpeg ...

    ffmpeg share版-ffmpeg-n4.4-latest-win64-lgpl-shared-4.4.zip

    1. **多媒体编码和解码**:FFmpeg 支持大量的音频和视频编解码器,如 H.264, H.265 (HEVC), VP9, AAC, Opus 等,能够对多种格式的媒体文件进行编码、解码、转码。 2. **容器格式处理**:它能处理多种容器格式,如 ...

    ffmpeg-4.3.1(ffmpeg.zeranoe.com)(win32 win64).rar

    FFmpeg 是一个强大的开源多媒体处理工具,用于处理音频和视频文件。这个压缩包"ffmpeg-4.3.1(ffmpeg.zeranoe.com)(win32 win64).rar"包含了FFmpeg的4.3.1版本,适用于Windows操作系统,包括32位(win32)和64位(win...

    ffmpeg.exe&ffprobe.exe&ffplay.exe.zip

    这个压缩包“ffmpeg.exe&ffprobe.exe&ffplay.exe.zip”包含了这三个实用程序,方便在Windows环境下进行网络流转码工作。 **FFmpeg** 是一个全面的、跨平台的解决方案,用于处理音频、视频文件。它支持转换、编码、...

    可以使用的ffmpeg-4.2.2-win64-static.zip

    FFmpeg是一款强大的跨平台多媒体处理工具,用于转换、编码、解码、流化音频和视频。这个"ffmpeg-4.2.2-win64-static.zip"压缩包包含了FFmpeg的预编译静态版本,适用于Windows 64位操作系统。下面我们将深入探讨...

    ffmpeg.exe+ffplay.exe+SDL.dll

    FFmpeg 是一个强大的开源多媒体处理工具,包含了多个组件,如 ffmpeg.exe、ffplay.exe 和 SDL.dll,它们在处理音视频方面发挥着至关重要的作用。这个压缩包提供的正是这些核心组件,使得用户无需复杂的配置,就能在...

    C#使用FFmpeg.exe完成视频截图功能

    FFmpeg 是一个强大的开源多媒体处理工具,它支持各种视频、音频格式的编码、解码、转换和流化。在C#编程中,我们可以通过调用FFmpeg的命令行工具FFmpeg.exe来实现视频处理功能,比如视频截图。下面将详细介绍如何在...

    ffmpeg-php扩展 ffmpeg.exe php视频格式转换

    标题中的“ffmpeg-php扩展 ffmpeg.exe php视频格式转换”指的就是使用ffmpeg-php这个PHP扩展,配合ffmpeg.exe可执行文件,实现PHP脚本对视频文件的格式转换功能。这个扩展提供了PHP接口,使得开发者可以轻松地调用...

Global site tag (gtag.js) - Google Analytics