前言:
随技术的发展,主流网络视频从当初的 real、wmv 变为了如今大热的 flv 视频。 flv 视频以其压缩率高、播放时不需安装特别解码器、可以嵌入 flash 来实现诸多自定义功能等优点,成为了诸多网络在线视频网站的最佳选择。 然而由于硬盘空间、带宽与处理速度的原因,直接把其他格式上传至服务器后令其压缩的 flv 的质量往往比原视频差很多。 网站方面一般都会把速度放在第一位。而对于观众而言,质量有时显得更加重要。以下是在 Windows 下压制自定义质量 flv 的方法。

软件:
VP6编码器
http://www.ogg.cn/Software/view-software-309.html
AviSynth(简称AVS)
http://www.onlinedown.net/soft/34382.htm
AVIUtl 0.99
http://sk.sosg.net/attachment/200707/aviutl.rar
FFmpegFLV
http://sk.sosg.net/attachment/200707/ffmpegflv.rar
加载外挂字幕用的VSFilter.dll
http://sk.sosg.net/attachment/200707/vsfilterdll.rar
千千静听
http://www.onlinedown.net/soft/8350.htm
Lame
http://ogg.cn/software/view-software-226.html
另外请至少安装一个解码器包,要压之前至少要能看。个人推荐“完美解码”,且其中会附带 VP6 编码器与 AviSynth
完美解码下载:http://dl.pconline.com.cn/html_2/1/124/id=39857&pn=0.html

方法:
能够压制flv的程序有很多,但大多都对源文件的格式有很多限制以及设置不够细化。 我们采用压制 VP6_MP3 AVI 后转封装为 FLV 的方法,其主要思路与一般的 AVI 压制教程十分类似。
首先,安装好所有必备的软件。FFmpegFLV.exe 请放置与压片的成品目录下,VSFilter.dll 放至 AVS 安装目录 plugins 目录下。
开始前我们要确定源视频文件的格式,以及其字幕的内嵌与外挂等情况。了解这些十分重要,现使用一段 rmvb 内嵌视频作为主要范例。

准备好后,打开记事本输入以下内容: DirectShowSource("D:\sk.rmvb",convertfps=true,20,pixel_type="YV12") LanczosResize(480,272) FlipVertical() “D:\sk.rmvb”为需要转的文件路径。“convertfps=true,20”是为了降低文件大小而少量调低了FPS,通常标准的 FPS 有 23.976、25 与 29.97。 “LanczosResize(480,272)”为转换视频的大小。“FlipVertical()”是竖直翻转视频。

提醒两点:
1. 480×272 并不是标准的 16:9 比例。如此设置的原因是 VP6 编码的视频的长与宽象素必须是 16 的倍数,否则会出现难看的绿边。 这里就偷懒直接拉伸了 2 象素,不想拉伸的可以用 crop(左,上,右,下) 、AddBorders(左,上,右,下) 裁切或添加黑边。
2. 在经过“FlipVertical()”后原影像就被倒了过来,做这一步是因为当后期把 avi 重封装为 flv 时画面会再次倒转,为了使 flv 影像正常所以压制时要倒着压。
编辑好后保存为“xxxxx.avs”,备用。 在这里再插入一个当源是AVI外挂字幕时的AVS教本 LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\VSFilter.dll") AVISource("xxx.avi",pixel_type="YV12") ChangeFPS (20) TextSub("D:\flv\xxx.ssa") LanczosResize(480,272) FlipVertical() VSFilter.dll路径和字幕文件路径请自定义。
avs 写好后,打开 AVIUtl,把 avs 拖进去打开。把所有滤镜与交错属性、FPS 改变关闭(初始时是关着的, 但是由于 AviUtl 的记忆功能会留着上一次的设置,请注意审核。同样的,不喜欢在 AVS 里进行改变大小、改变 FPS 的也可以把工作交给 AviUtl 处理。

然后入下图点选影像压缩设定。


选择 VP62 然后点“设定”。本次将使用最耗时但效果最好的 VBR 2pass BestQuality 进行压制。Bitrate(码率)可按需要设置, 但就目前中国的网络环境不推荐设的太高,否则就不能叫在线了。


General页面设置
Advanced页面保留原默认设置

Settings 页面可以保存你自己的配置方案,方便批量操作。这里提醒大家设置好 First Pass File 的路径, 其文件夹必须真实存在。First Pass File 是视频 1st Pass 的最重要文件。第一次压制的 avi 是没有用的, 有价值的只有这个 First Pass File。虽然按照默认也没事但建议大家添一个绝对路径并对不同的压制任务进行不同的命名。以防在任务出错时可以不用重复 1st Pass。


设置好视频后按下图输出AVI。在此处可以进行最后的观察,观察分辨率、FPS、以及编码的正确与否。 第一次压制的AVI是无用的所以音频可以先不管,可以勾选音频无声减少压片时间。按确定则开始进行1stPass预压制,按加入队列则可以留到以后批处理。



1stPass完成或加入队列后,回到刚才的视频设置,把Mode 改成 如图的2ndpass项目,注意其他编码器配置与First Pass File位置均不可再改动。


第二次编码时就需要设置音频了,按下图进入音频编码选项。 flv格式只支持PCM与MP3两种音频,且采样率只能是11025Hz 22050Hz 44100Hz中的一种,且只有CBR和VBR才不会出现影音不同步现象(出问题的是ABR)。本人电脑因RPWT竟然在低码率下的配置里都是ABR,于是将再换一方式压制音频。



设置好后再次输出AVI 此时的AVI就是视频编码上的最终输出了。


(Hint:关于批处理,只要点文件/批处理就可以看到之前加入队列的任务。但是在实际压制过程中经常发生在1st pass与2nd pass之间, 1st Pass完成后First Pass File还没完全写入硬盘 2ndPass的任务就开始,导致出错的现象。在有多个任务的情况下, 我的解决方法是在每个任务First Pass File位置设置不同的情况下先先全部1stPass,随后再进行2ndPass。 或者在1stpass与2ndpass之间夹一个Wav输出任务。这是一个减少Error的简单技巧。)
当第二次的AVI压制好时,预览下就可以看到一个倒过来的视频了。

接下来处理在AVIUtl里无法搞定的VBR MP3
打开avs后按下图选择“输出WAV”


确定好后输出(推荐用PCM输出,速度最快。为压缩将来的mp3体积也可以可以使用1ch(mono)输出。)


然后再使用音频转换工具把wav转换为需要的mp3,这里我就用最常用的“千千静听”来转换格式。
把wav扔进千千静听后,右击选择转换格式。


选择命令行编码器并进行如下设置

设置好后就可以输出我们需要的VBR MP3了。“-V 7”是质量(1~9),约小质量越好。(千千自带的mp3编码器也能用,不够在VBR上不够强)

此时把ffmpegflv.exe 压好的AVI与MP3放至同目录下。


然后再打开记事本输入以下内容“ ffmpegflv -vcodec copy -vtag vp6f -acodec copy -i SK@SOSG.avi -i SK@SOSG.mp3 -f flv -map 0:0 -map 1:0 SK@SOSG.flv 意思就是把SK@SOSG.avi与SK@SOSG.mp3重新封装成SK@SOSG.flv,具体文件名到时候自定义(此时AVI、MP3、FLV文件名里不能有空格,否则命令就会出现错误),要处理多个文件时就在一个文件里多复制粘贴几行命令。把这个文件保存为xxxxx.bat,放到avi与exe的同目录下,然后双击该bat执行。片刻过后,SK@SOSG.flv就会在同目录下出现了,这便是最终文件,影像也从倒转正。

关于上传: 压好了flv当然是要快点上传分享。但是这里还要说一下:并不是每一个视频网站都支持自压flv的上传。 就我目前所知也就Mofile视频可以上传自压flv,其他著名网站如土豆等在上传自压flv后依旧会再次编码, 降低质量。在此也愿土豆快点升级系统,支持Flv自压上传。