用 HTML5 播放视频,最流行的视频格式非 MP4莫属, 所有最新浏览器都支持;
MP4 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件;
以前做过一个把其它编码格式的视频转成 MP4的程序,转换的质量可以进行控制,质量越差,视频就越小,所以可以把几G的视频可转成 几十M的MP4,方便放到网上用 HTML5 观看。
该程序只是简单包装了对开源编码器的调用过程,具体用到下面的编码器和类库:
x264 => 视频编码器
faac => 音频编码器
MP4Box => 把视频和音频混合为一体
AvisynthWrapper.dll => AVI 脚本的解释器(需要安装 Avisynth 程序)
上面的编码器只支持部分视频格式,如wmv,flv; 不支持的视频要用到 ffmpeg 编码器,它支持大部分视频格式,如rm,rmvb,mp4;
把它们结合起来就能编码绝大部分的视频格式了;
详细的作用和相关的参数,在网上一大堆,这里不再赘述;(真是佩服有些外囯人那种大公无私的贡献精神,如此复杂实用的程序都开源出来,供全人类使用,据说国内某某风暴,扣扣影音都用了很多开源的视频编码器,自己却又不开源,鄙视之)
程序已开源到GitHub: https://github.com/Dhenskr/MP4Encoder.git
源码解决方案的目录:
编译时注意把 MP4EncoderTester 项目的目标平台改成 x86, 否则在调用 AvisynthWrapper.dll 类库的方法时会出现平台错误;
在运行程序的目录下(MP4EncoderTester项目的 bin/Debug/ 目录已包含有下面的几个文件,也可以上相关的官网下载)要包括下面框中的文件,
Avisynth_258.exe 需要先安装,用来解释 avs 脚本文件进行视频处理;
测试时注意: MP4EncoderTester 项目 Program.cs 文件的 Main 方法, input 和 output变量改为自己系统下面相应的视频路径:
static void Main(string[] args) { string input = @"C:UsersCanieDesktop estVideoorigorig.wmv"; string output = @"C:UsersCanieDesktop estVideoencodedencoded.mp4"; EncoderHelper encoderHelper = new EncoderHelper(input, output); encoderHelper.Encode(); }
程序参考了强大的视频编码器:MeGUI
如果想学习视频编码建议直接看 MeGUI的源码,而我的这个程序只是为了放在后台对指定文件夹的视频进行自动定时转换,所以没做界面,功能也比较单一,单纯编码成 MP4格式;
源码缺少详细的文档说明,有心情再慢慢完善;