LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1671|回复: 0

Mencoder学习手记之第N篇 - x264学习

[复制链接]
发表于 2010-5-13 00:30:02 | 显示全部楼层 |阅读模式
  学习x264的压制,依然是从Google开始的。其实H.264就是我的选择,好处是文件体积小(相对rmvb,flv等等格式),暂时没有收费,网络传输的效果也不比FLASH差,兼容性也好.

  这里说明一下涉及的概念--
  H.264编码是MPEG定义的一种视频编码格式,也可以说是一种标准;
  不过要实现这种标准需要一个程序来完成;
  x264就是实现这样一种标准的程序,而且是开源的;
  x264由VideomLAN负责控制程序的代码发布;
  VideoLAN就是那个大名鼎鼎的播放器VLC的开发组织;
  mencoder仍然是借用了FFMPEG的H.264编码部分;
  mencoder并且借用了x264的相关部分.
  
  一开始被Mencoder中H.264繁多的参数困扰,一看头大,转身去学flv压制,后来明白这样的逻辑,无论Mencoder还是x264,还是那些商业版本的压制程序(比如AODBE的FLV压制程序),都要遵从IEEE定义的H.264标准,因此那些参数有相当一部分是相同意义的。

  后来在网络上看到很多文章,渐渐体会到flv远不能和h.264相比,于是硬着头皮看MAN页,很痛苦.不过后来找出一个好方法来学习x264部分的参数,就是做一个表,找出一些常用的参数,并把结果记录,这个表如下所示。

为了简化学习,mencoder的”源文件””输出文件””-oac部分”我就统一为“lbld.avi -o ld.avi -oac copy”,只是说明剩下的 -ovc 部分,来源视频依然是那个拉布拉多犬的视频,原来大小是50M左右.

我按实验次数来一一说明。

(表格见贴图)

1. 我以前看过一些文章,知道2-pass是一个好的选择(对于h.264编码格式),于是我就直接仅用一个pass=2参数来进行压制,结果出现表中的错误。命令就是”-ovc x264 -x264encopts pass=2“

2. 一顿Google爆搜无果,又停下几天时间。觉得学个知识怎么这么难呢!后来实在没辙的时候,仅用一个cabac参数,结果OK了!马上通过Google再搜索,看到的一篇文章的做法,这才明白2-pass是需要先做一次1-pass,才能进行2-pass的压制。请看第三次和四次实验,我参考的这篇文章是这样写的。

mencoder.exe -nosound -vf scale=1280:-3,harddup -ovc x264 -ffourCC H264 -x264encopts bitrate=3568:frameref=2:threads=2:pass=1 "test.mkv" -o "test.Wis.avi" 
  
mencoder.exe -nosound -vf scale=1280:-3,harddup -ovc x264 -ffourCC H264 -x264encopts bitrate=3568:frameref=2:threads=2:pass=2 "test.mkv" -o "test.Wis.avi" 

3. 用了一个 pass=1 参数,正确了,有信心了,脚不疼拉,走路有劲了,看到希望了。
4. 先删除第三次生成的avi文件,然后按照 pass=1 pass=2的步骤做两次编码;

  暂时停止一下,工作忙没有时间搞,不过今天用第4次的参数将一个vcd的dat文件压缩成110M(源文件350M)

  其实H.264的编码主要有7-10个左右的关键参数,比如去块,提高PSNR,通过"可变码率"进一步减少文件体积(质量不会怎么变化),难度也不会很大,等有空的时候整理一下.

  我觉得说到这一步了,剩下的参数大家可以自行实践下,找个不大的视频,多压几次看看效果就成了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表