前言 本文通过一个实例来详细讲解如何压制高质量的MP4。 虽然例子是为我的手机Nokia N900进行编码,但是对于上传Youku等视频网站的视频压制,对于高清视频的压制也同样有学习价值。 本人只是菜鸟,完全依靠网络学习,并没有系统的学习过书籍知识,所以有错误处请提出来,非常感谢。 如果你对视频的基础知识完全缺乏,请花10-20分钟阅读此文《高清一句话扫盲》( http://blog.sina.com.cn/s/blog_64c29d9e0100yhmv.html) 本文会不断更新和修正,欢迎转载但请添加本文链接以保持读者阅读时能获得最新资料 本文需要用到多种软件,所有软件在此列出并且简单的解释安装方法 #除了MediaCoder在64位系统下建议使用64位版,其他软件强烈建议使用32位X86版本,许多兼容性错误可能浪费大量时间 必用软件
本文中还将利用一些额外的软件,推荐下载。但是不使用这些软件也能很好的完成任务。但完成方式或许稍稍复杂或者对新手不友好
正文 什么rmvb啊不要来,这东西最讨厌了 概要 本文包括多个部分,这里详细的写出每部分的作用 对于熟悉部分的你可以略去或者换成自己喜欢的方式 不熟悉的则可以依照本文步骤step bt step,本文的多个步骤中含有大量补充知识,欢迎指正和提出疑问
例子:“秒速5厘米”原盘压制为手机Nokia N900可播放的MP4 要求:高质量、手机原生播放器不支持mkv封装,同样不支持内封或者外挂的字幕 编写Avisynth脚本 本段包括2种不同的AVS脚本编写方式:使用MeGUI或使用windows自带Notepad进行编写 什么时候需要使用Avisynth? 如果单纯的转视频也许不用,我在需要将字幕强行打在画面上时用。 本文中Avs只是起对原视频的一个初步输出定义用,更多的任务交给MediaCoder 如何生成? 本人使用MeGUI生成,本文中简单的使用可以用记事本编辑然后保存为.avs后缀 也可以下载其他的avs脚本生成器进行编写 使用MeGUI 打开MeGUI 初次可能要求你下些解码器包Neroaac神马的,你可以自己搞定也可以不管他 (依照下图)选择AVS Script Creator 选择文件以后点击第三个DirectShowSource 然后依照下图进行设置 完成后脚本被保存在源文件夹下,名字与源文件相同 可以直接用记事本(Notepad)打开查看 使用Notepad等文档编辑软件 新建记事本(Notepad) 手动输入相关参数 先给出一个avs脚本范例
接下来一个一个的讲解
保存,然后将txt的后缀改为avs即可,本文要应用的avs功能非常基础,所以无论是否新手完全可以自己手动编辑 #注意也可以不在avs脚本中修改分辨率,在mediacoder中也可以,不过在这个阶段调整好分辨率易于观察字幕的大小对画面是否合适。 将avs文件拖入支持的播放器例如PotPlayer(一共有哪些?待补完)看看播放的效果就好了 如果播放有问题则表示avs脚本中可能出现错误,请仔细的检查脚本例如有无英文标点打为中文标点,调用的渲染器地址是否正确等 如果效果好就进入下一步——mediacoder转码 关于如何调整字幕使字幕适合手持播放器请参阅:字幕简单调整(待补完) 使用MediaCoder进行视频压制 建议将界面切换至"高级设置" “任务”界面 CPU核心把CPU提供的线程全部选上吧 转移已完成文件之类的有特殊需求可以使用 建议并行化1任务,也可以选择2任务。(效率几乎没有差别) 不过并行两任务在封装文件时(CPU闲置IO大量读取)可以将CPU资源用在另外一个视频处理上(快个几十秒吧?) [建议] 我喜欢设置输出文件到桌面,每次看到桌面的时候一目了然,不会和原文件混在一起 接下来这里需要稍稍设置一下 视频码率决定视频的大小和质量 码率越高质量越好但是一般需要码率与体积取得平衡(只有极少数人看秒速5厘米会下载20GB的原盘,原盘的话CLANNAD after story 则要220G) 码率的是信息流的大小的呈现,信息的多少决定包含内容的多少,因此更多地信息(更高的码率)会获得更高的质量(更丰富的细节) 重编码的意义便是控制好质量和体积的平衡。当然为手机重编码的时候我们还可以考虑到手机屏幕的好坏和手机播放能力的支持程度。 千万不要傻到把低码率转高码率,如果可行的话20MB的渣画质视频也可以转换成8GB的高清1080P,但是可能么? 合适的码率:对于我手机类似的800*480屏幕,推荐码率在1000到1500之间都行,其实一般手机显示屏和视频渲染器都不太好,所以1200也许是个合理的决定 分辨率更高的手机可以根据像素点来计算(800*480=384000,那么换成960*640=614400,1900或许是个高质量的不错的码率) 最高码率设置:2-pass动态的分布码率,在暗景和复杂动态场景处得到更多的码率,但由于手机播放能力或许有限,所以建议自己根据机器配置设置。一般情况下不设置也没有问题的。 缓冲大小和最低码率可以不管 推荐二次编码但此方法用时稍长,其次是平均码率模式。非常不推荐恒定码率模式。 二次编码:先把整个视频的内容、画面分析一遍,然后依照给定的码率分配相应的码率到相对的场景中(简单的场景分配码率少,复杂场景分配多),这样分配码率准确而且高效。 2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。 优势对于平均码率是更好的在全局分配码率。从而获得更好的质量(或者同等质量减小体积)。劣势是时间要多出不少 时间问题:平均编码肯定比二次编码时间短 因为二次编码比固定编码增加了整体视频分析这个环节(也就是额外的解码一次)。不过并非某些人所说的两倍时间(当然通过开启相关设置也可以达到),本人感觉大概多了20%到30% 除了2pass,还有例如3-pass的多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。 格式选择H.264,关于H.264/AVC/MPEG4的详细介绍请参阅英文维基百科条目 简单的说一下,H.264是目前最高效的编码格式,没有之一。可以被封装成mkv、 mp4等众多文件格式 RealVideo是就是很多人喜欢的.rm,.rmvb。 规格(Profile)(链接待补完)一般来说有4个标准,Base,Main,High和High10 我的手机支持有限所以使用Base,目前没有任何移动设备支持High10规格,iphone4s这种新手机支持High规格 简单的说规格越高画质越好,因为算法越复杂越先进,如果不清楚自己手机的播放能力可以压制多个10秒的片段来测试手机对视频的支持 级别(Level)(链接待补完)规定了视频的一些基本参数 例如参考帧ref. frame,分辨率支持和最大码率 比如说5.1最大支持4K分辨率,而比较流行的4.1最多对1080P支持ref 4,720P支持ref 9(不明白略过) 关于Level的细则请去英文维基百科H.264/MPEG-4 AVC查看详细的Level对照表 请注意对级别的支持同时受限于移动设备本身,比如我测试出来的N900最高支持Base @3.0 关于预设(preset)如果给手机转一般使用Medium就好,不过推荐Very slow 顺带一句使用very fast或者ultra fast将会惨不忍睹 custom我以后有空慢慢写 优化我没有发现作用,一般选取Normal即可,动漫压制也可以尝试Animation GOP我们不管,默认值为25-250 B帧(B-Frames)(链接待补完)详细的请参阅维基百科条目视讯图像压缩类型 对于普通视频如电影,建议选取3-4,动漫可以选6(因为场景的变化更小,连续帧和相似帧更多) 参考帧数(Ref. Frames)(链接待补完)建议选取3或4,最大值为16但是也请对照Level表。例如我选择的Level3 480P最高支持ref 6 动漫或许能稍稍选高一点例如6(本人不了解,请人补充和解答) 详情参见维基百科英文条目Reference Frame 因为是转换视频,音轨暂时不将“启用”勾选,下面会进行详细设置的 容器选择MP4 分辨率在AVS脚本中已经修改过了,所以略过 色彩空间选择原始,如果实在想选就选I420 右边的选项不用管了,要去噪声什么的用avs脚本吧 声音选项全部略过 略过。。。这个解流 字幕因为提前写入了avs的DirectShowSource,所以选择Disabled 其他的什么Avisynth脚本,流都略过 建议如果你对当前设置满意的话,在文件中“保存预设文件”,保存参数供以后使用 使用MediaCoder进行音频压制 这里使用Mediacoder来转音频,当然你用MeGUI也行 把原视频文件拖入MediaCoder 视频的勾勾给叉掉! 如果有多个音轨可以在这里选择 选择文件-单击右键-被转换文件信息(或者直接选中文件然后 F8) 里面有列出Audio #123,也有音轨的详细参数和对应的ID 格式:建议选择AAC(链接待补完)系列,或者选择质量更低的MP3 32kbps-96kbps建议选择HE-AAC(高效性规格),128kbps至更高建议选择LC-AAC(低复杂度规格),但建议不要超过192kbps。 选取Target Bitrate,给定一个要求的码率,在整个音轨中进行动态码率分配 CBR(保持一直不变的码率)是最渣的,如果蛋疼可以选择 CBR诞生于DVD等设备能力有限,介质大小严重受限的时代。全局固定码率的坏处就是在需要码率的地方码率分配不足导致效果底下,低码率处分配相同码率导致码率的浪费。总结下来就是体积大音质差 容器可以选择Raw Stream,MP4或者M4V(这个是针对AAC的,mp3选择Raw Stream直接以.mp3的形式出现比较好吧) 如果是给手机播放的请选择Stereo,即两声道 如果想调整音量可以选择增益,为正值时(如3.0 dB)音量增大,为负值时音量键小 不过很可惜个人试着转了几遍音轨,发现增益的多少似乎完全没有起作用,不同增益值转出来的AAC完全一样。应该是软件bug吧 其他的不用设置,忽略掉。 使用MeGUI对视频、音频流进行打包 恭喜阁下已经到最后这一步了!这一步的设置十分简单,只需花费您2、3分钟时间 这里使用MeGUI,也可以自己使用MP4 BOX等。MedieCoder也行,不过没有提供直观的界面,所以参数等容易错设 选择Mp4 Muxer 然后在打开的如下界面写入视频文件地址,音轨的地址,点击Queue加入队列 字幕就算了吧,都是Mp4格式的了 顺带一提如果想封装成MKV建议使用MKV(需补完),mediacoder复制视频流同样可以进行MP4或者MKV的封装 上图是队列(Queue)界面,点击Start即可 合成进度 右侧是两个视频、音频源文件 Priority可以控制CPU对此程序的优先级 大功告成! 其他: 本文使用的Mediacoder是0.8.1版本,通俗的编号是2011版RC10 由于本文偏长,所以字号一般以14号为准,方便阅读 十分感谢文中所提到的所有软件的作者,虽然我认为MediaCoder滥用开源社区的产物 此文花费了我数小时的时间(which is very long),希望此文能增加大家的转码知识,节省大家时间(而并非如同众多的转码介绍文一样浪费阅读者的时间) 此文的在发表前就修订了数遍,图片都进行了细致的加工 本文会尽力在未来数年内一直保持更新,非常希望大家提出建议和指正问题。我会积极的更新、改进此文以更好的帮助大家 细心看截图可能会发现本文的截图于Win7和Win8 Developer Pre.两种环境下 非常感谢在我写作过程中一直支持和鼓励我的朋友,虽然他们根本不知道我写的内容是什么 :D Changelog将在这一部分提供 ChangeLog 12-01-26 此文第一版发布 12-01-26 修订了部分排版和重新规定了字体(数分钟后) 12-01-26 重新进行大量的排版,同时更改了图片以适应网页宽度 12-01-26 离初次发布大约1小时,登陆网页进行排版修订,更新了部分错误内容 12-01-26 增补了关于HE-AAC与LC-AAC的内容,网页端修改(离发布文章大概1小时10分) 12-02-02 修订了关于2-pass那一章的内容,修订了一些文法错误和其他的一些细节。(编辑真累啊,网页版和本地客户端live writer编辑都有各种问题,只能揪着源代码编辑。第一次接触html什么的,自己乱捣鼓大概马马虎虎的抄好了) |
|