分享

通过AVS,MeGUI压制MP4AVC简单攻略

 redalx 2010-01-28

前言:
之前很长一段时间,压制dvdrip都是用GK,VirtualDubMod.
不可否认,在直观性方面确实VDM是很方便的,在DivX和XviD时代,VDM是当之无愧的全能.而且Xvid的Status图形化工具实在是太好用了,一下子转到x264还真不习惯没有这个工具了呢.
由于x264 GUI的缺乏,使得vdm对264的支持有限,虽然有x264vfw的存在,不过更新不及cmd形式的x264cli,所以,MeGUI应运而生.

MeGUI,基本来说就是一个GUI界面的合集,通过可视化的设置,自动产生各种编码器需要的cmd命令和参数,进行队列执行.
当配合AviSynth,就可以达到VDM可以实现的任何功能(基本上,AVS也在不断更新中...),诸如切边(Crop),加入黑边(AddBorders),抽丝(deinterlace),变换分辨率(LanczosResize),还有更高级的类似iVTC就.
本文仅介绍由HDRIP/DVDRIP/RMVB转制MP4AVC所经常需要使用的一些AviSynth功能,高级应用请自行查看AviSynth Document,或者访问.

AviSynth初识:

安装好AviSynth 2.57之后,你可以使用MeGUI自带的AviSynth Script Creator创建AVS脚本,不过在这里为了练手,还是建议自己打开记事本新建一个txt文档.


让我们看一个最简单的用于处理视频的avs脚本,
DirectShowSource("C:\test\Terminator\The.Terminator.BDRe.x264.mkv",23.976,audio=false)
textsub("C:\test\Terminator\The.Terminator.BDRe.x264.srt")
LanczosResize(480,256)
以上使用到的avs函数包括,
DirectShowSource("source",fps,audio=false,video=false)
加载片源函数,有多个参数可调."source"即是片源的路径,fps为片源的帧速,audio/video=false为强制屏蔽音频流/视频流,默认为true.
由于rmvb,mkv作为片源,可能会导致DSS函数读取帧速不正确,所以fps可以作为可选参数,强制以固定帧速读取.
Textsub("source") / Vobsub(“source”)
加载字幕函数,安装vsfilter之后可用(vobsub自带).可以加载srt,ssa,ass,idx+sub字幕.各种特效,都可用ssa/ass实现.
LanczosResize(width,height)
改变视频流分辨率,数值请尽量使用偶数,原因之后说明.由于PSP的 系统限制,使得视频文件仅支持480*272以下(OE系统)和320*240以下(SE,1.5系统),所以片源必须缩小到符合规范才能被psp支持. 其于BilinearResize,Lanczos4Resize,PointResize的区别优劣势请自行参考Document.
将以上文本保存成扩展名为.avs文件后即可以用MeGUI加载.
AviSynth支持自定义变量和函数嵌套(暂且这么称呼吧,也有点像Class其实),所以以下两段avs脚本效果是相同的:
(1)
Vi=DirectShowSource(“source”).textsub(“source”)
LanczosResize(Vi,480,272)
(2)
DirectShowSource(“source”).textsub(“source”).LanczosResize(480,272)
所以,写avs脚本是非常自由的,大家可以随意发挥.
接下来再介绍几个常用的处理视频的函数,
AVISource(“source”,audio=false)
加载片源函数,仅用于AVI封装的文件.自动读取fps无需手动干预,仅可屏蔽音频.
AddBorders(x,x,x,x)
画面加黑边函数.四个参数分别为左上右下的象素数.由于压缩视频最终分辨率长宽都必须是16的整数倍,当按照源高宽比缩小后的像素为非16的倍数时,通常就需要在画面上下方加入黑边. 另一种方法就是直接拉伸到最近的16的倍数,将造成细微变形.
ConvertToYV12()
转换色彩空间为YV12.由于某些片源的色彩空间不被x264支持,可转换为YV12.
Crop(a,b,y,z)
画面裁切函数.a,b,y,z分别代表左侧裁去像素,上方裁去像素,画面剩余宽度,画面剩余高度.
ChangeFPS(fps)
改变视频帧速.采用丢帧方式转换帧速.
ConvertFPS(fps)
同上.采用混合帧方式.

处理音频的方法基本类似,可使用以下脚本,
DirectShowSource("C:\test\Terminator\The.Terminator.BDRe.x264.mkv",video=false).Amplifydb(3)
由于AC3/DTS音频在2.0声道下声音较小,所以我们需要用到Amplifydb()函数使用音频增益.
Amplifydb(3)
音频增益函数,3表示增益的分贝数为+3,也可用负数,大于8会出现暴音.
ResampleAudio(48000)
音频重采样函数.MP4AVC仅支持采样率为48000的AAC音频,对于其他采样率的音频源需要重新采样.
SSRC(48000)
同上.采样效果更佳,速度也更慢.


MeGUI的使用:

将MeGUI到任何目录后,请先确保.Net Framework已经安装就绪.打开MeGUI主程序后,界面如下:
(提示:如果出现程序运行错误,请删除MeGUI\jobs\下的所有xml文件)



本傻瓜包原始目录为C:\Program Files\MeGUI\,如果安装到其他目录,请自行在Setting中设置各外挂内核的路径.
如界面所示,Input标签即是操作主界面.上方为视频处理区域,下方为音频.
我们先介绍视频处理.
点选AviSynth Script读入刚才编写的avs脚本,读取成功的话会出现浏览画面,可以拖动/播放来确定是否和压制要求相符.如读取错误,则会有提示.
Video Output则是输出视频的路径. Codec是使用的视频压缩核心,压制AVC必须使用x264. File Format使用RawAVC即可,不需要封包.
接下来是最重要的部分---设置x264cli参数.点击Config,进入设置见面.仅仅需要压片而不需要研究x264的,可直接跳过此部分,使用自带的配置文件即可(Video Profile选择PD-PSP,进入设置见面,单独更改Bitrate码率即可,一般使用200-->500即可得到理想的效果)



Main
Mode 压缩模式,推荐使用2pass (Automated 2pass)

Turbo 加速模式,在1st-pass中更快做出判断
Bitrate 压缩目标平均码率,Kbps为单位
Logfile 产生的1st-pass status文件存放地址,默认为与avs相同目录
Enable Deblocking 开启环路滤波
Deblocking Strength
Deblocking Threshold
Enable PSNR calculation 开启PSNR计算,推荐不开启
Enable SSIM calculation 开启SSIM计算,推荐不开启
Threads 开启线程数,推荐为0 (单核1,双核2,带HT的*2)
FourCC 四字符代码(four character code), 是一种独立标示视频数据流格式的四字符代码
AVC Profiles AVC框架,PSP基本只支持Main Profile
AVC Level AVC级别,PSP支持Level 3以下

Zones




RC and ME
VBV Buffer Size 码率控制缓冲区的大小,单位kbit,默认0
VBV Maximum Bitrate 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
VBV Initial Buffer 码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9
Bitrate Variance 平均码率差异,较小的值可以让目标文件的码率与预期更接近,较大的值更能发挥x264的适应性得到更高质量,可取1.0-4.0
Quantizer Compression 量化曲线压缩控制,,0为固定码率,1为固定量化值,默认0.6
Temp. Blur of est. Frame complexity 根据相邻帧平滑量化值比例的最大值,范围0~99.9,默认20.0
Temp. blue of Quant after CC 对统计文件结果平滑量化值比例的最大值,范围0~99.9,默认0.5
Chroma M.E. 启用运动向量检测
M.E. Range 运动向量检测最大长度,可取16-32,推荐16 (32可提高质量,单不明显,速度严重降低)
Scene Change Sensitivity 画面动态变化限,当超出此值时插入I帧,默认40
M.E. Algorithm
Subpixel Refinement 动态预测和分区方式,可选项1~7,推荐6 (压缩速度1为7的四倍)
Kayframe Interval 最大IDR帧间距,默认250 (一般为fps*10,对于23.976fps推荐240)
Min. GOP Size 最小IDR帧间距,默认25 (等同fps)
Noise Reduction
Encode interlaced
Trellis
Number of Reference Frames
Mixed Reference frames
CABAC 内容自适应二进制算术编码(CABAC,高效率的熵编码)(会提高质量,但速度较慢)
No Dct Decimation
No Fast P-Skip



Advanced
Minimum Quantizer 设置最小量化值,范围0~51,默认10
Maximum Quantizer 设置最大量化值,范围0~51,默认51
Maximum Quantizer Delta 设置相邻帧之间的量化值差,范围0~50,默认4
Credits Quantizer
Factor between I and P frame Quants I帧和P帧之间的量化系数,默认1.40
Factor between P and B frame Quants P帧和B帧之间的量化系数,默认1.30
Chroma QP Offset 色度和亮度之间的量化差,范围-12~+12,默认0
Inter luma quantization deadzone
Intra luma quantization deadzone
Macroblock Options 动态块划分方法
Number of B-frames 在I,P帧之间可插入的B帧数量最大值,范围0~16,默认0,推荐2-3
Adaptive B-Frames 自适应B帧判定,推荐勾选
B-Pyramid 允许以B-Frame作为参考帧 (勿开启,会导致psp播放不能)
RDO for B-frames
Weighted B-Prediction
Bidirectional M.E.
B-frame mode 动态预测方式,可选none/spatial(同一帧的相邻位置)/temporal(前后帧取相同位置)/auto,默认spatial,推荐Auto
B-frame bias 控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0


参数设置完毕后,确定即回到MeGUI主界面.点击Enqueue将任务加入队列.切换到Queues标签即可 看到2个等待的任务,分别是2 Pass 1st Pass和2 Pass 2nd Pass.为了了解设置的码率是否合适,建议先将2nd Pass暂停,这样在做完1st Pass后可以查看码率分布状况和Q值统计.
开始1st Pass吧. 漫长的等待之后(720p,120m的片源,PD930+2G的机器大约需要1小时左右),一个stats文件诞生了.
stats文件可以由记事本,UE打开,不过这样不够直观,所以这里提供了dotBLOt’s x264 Stats Analyzer工具.

主界面如下:


通过菜单可以打开刚才生成的stats文件,基本信息会显示在Log窗口中,诸如文件名,分辨率,码率,帧数.点击Analyze,则会产生一个统计表,点Report即可见.



在Frame Statistics中,可以看到I,P,B帧的数量,占总帧数的比例和分别的平均Q值.还能显示出所有的视频帧的平均Q值,偏差值和最小最大Q值.
注:Q值,即量化值,数值越小代表与原始画面的差别越小,也即质量越高. x264不同于XviD,对于PSP,量化值达到20-25即可得到较为满意的画质.(相对的,XviD是I强制为2,P为3-5,B为5-15)



Textual Report产生的统计表,包括了所有stats文件的信息,就不多说了.

如果对于给出的码率感到满意,就可以进入2nd Pass步骤了;不满意,则重新设定码率,1st Pass 重新来过.
2nd Pass结束后,就能看到我们需要的.264文件了.视频部分暂告一段落.

音频压缩相对简单,在Audio Input选择处理音频流的avs脚本,Codec选择FAAC,Container为Raw-AAC.然后点Config设置音频参数.
需要改动的不多.如果音源为5.1/6.1多声道,则Output Channels需要强制更改为Downmix multichannel to Stereo;音源为2.0声道则使用默认的Keep Original Channels即可.码率使用ABR 128.
设置完成后就可以将任务加入队列,FAAC自动使用2pass压制产生.aac文件.

视频音频都压缩完成后,就需要将其封包为MP4格式.这里需要用到MeGUI的工具MP4Box.在菜单中选择Tools – Muxer – MP4 Muxer.
Video Input选取刚才生成的.264视频文件,FPS为它的帧速.
Audio Input选择.aac文件,Delay可选,如果视频音频不同步可调整,单位为ms.
Muxer Output就是生成最终的MP4的路径.
跟压缩一样,放入队列,开始封包.

生成的MP4文件放入ms0:\Video\目录下即可以被psp识别.

如果你的psp不认以上的mp4,就必须使用Atom Changer更改MP4文件头.
手动编辑Atom.bat,将source.mp4更改为源mp4,MAQxxxxx.mp4为目标文件后,执行该批处理后即可得到PSP所能播放的MP4AVC.


后记:
由于PMPAVC与MP4AVC同样视频编码采用x264,而音频编码可采用aac/mp3,所以以上方法也可用于压制PMPAVC.仅需要注意,PMP仅支持采样率为44100的音频,最后封包请使用PMP Muxer(自行下载).
附上 x264参数

NbThreads>1</NbThreads>编码线程(使用分片技术)
<NoDCTDecimate>false</NoDCTDecimate> 关闭P帧联合编码(可以增加细节,但也会增大体积)
<PSNRCalculation>false</PSNRCalculation> PSNR数值计算(PSNR:峰值信噪比,是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值)
<noFastPSkip>false</noFastPSkip>关闭快速P帧跳过检(PSkip类型宏块:也就是COPY宏块。无像素残差,无运动矢量残差(MVD)。直接利用预测MV得到像素预测值。像素重构值=像素预测值)
<NoiseReduction>0</NoiseReduction> 噪声减弱(噪声:画面上不断闪动的亮斑点或色斑点),范围0~100000,默认0
<MixedRefs>true</MixedRefs>混合参考帧,可以在一帧内使用不同参考帧
<X264Trellis>1</X264Trellis>x264 Trellis量化
<NbRefFrames>2</NbRefFrames>最大参考帧数,范围0~16
<AlphaDeblock>0</AlphaDeblock>去Alpha块环路滤波
<BetaDeblock>0</BetaDeblock>去β块环路滤波(姑且翻之),环路滤波(一种除马赛克算法)的 AlphaC和Beta的参数,范围-6-6,默认都为0,两项参数对于码率、质量、观感有影响,Alpha和Beta两项的设置,都是负值时画面显得锐 化,正值时显得柔和,但两者的具体特征不同,Alpha在块输入时进行检测,Beta则是输出时进行。
<SubPelRefinement>7</SubPelRefinement>
动态预测和分区方式,可选项1~7,默认5(与压缩质量和时间关系密切,1是7速度的四倍以上)
1:用全像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
2:用半像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
3:用半像素块进行动态搜索,对每个块再用质量模式进行四分之一像素块精确搜索
4:用快速模式进行四分之一像素块精确搜索
5:用质量模式进行四分之一像素块精确搜索
6:进行I、P帧像素块的速率失真最优化(rdo)
7:进行I、P帧运动矢量及块内部的速率失真最优化(质量最好)
<MaxQuantDelta>4</MaxQuantDelta> 设置相邻帧之间的量化值差,范围0~50,默认4
<TempQuantBlur>0</TempQuantBlur> 朦胧度量化
<BframePredictionMode>3</BframePredictionMode> 动态预测方式,默认"spatial"。可选项:none/spatial/temporal/auto
<VBVBufferSize>-1</VBVBufferSize> 码率控制缓冲区的大小,默认0
<VBVMaxBitrate>-1</VBVMaxBitrate> 平均码率模式下,最大瞬时码率,默认0
<METype>2</METype> fullpixel 的动作估算方法,作六边形搜寻, 半径为 2
<MERange>16</MERange> 作穷举搜寻时的半径范围(范围4-64)
<MinGOPSize>25</MinGOPSize> 最小GOPSize(所谓GOP,意思是画面组,MPEG格中的帧序列,分为I、P、B三种,如排成IBBPBBPBBPBBPBBP...样式,这种连 续的帧图片组合即为GOP(画面群,GROUP OF PICTURE),是MPEG将来存取的最本基本的单位,它的排列顺序将会一直重复到影像结束。一个GOP就是一组连续的IPB画面)
<Profile>1</Profile>预先规范的等级规格指定的profile编码
<Level>15</Level> 设定等级(as defined by Annex A)
<IPFactor>1.4</IPFactor> ip因子,I帧和P帧之间的量化系数,默认1.40
<PBFactor>1.3</PBFactor> pb因子,P帧和B帧之间的量化系数,默认1.30
<ChromaQPOffset>0</ChromaQPOffset> 色度块量化值设置(设置色度和亮度之间的量化差,范围-12~+12,默认0)
<VBVInitialBuffer>0.9</VBVInitialBuffer>码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9
<BitrateVariance>1.0</BitrateVariance> 码率差额,平均码率模式下,瞬时码率可以偏离的倍数,范围0.1~100.0,默认1.0
<QuantCompression>0.6</QuantCompression> 线性量化控制,0.0为固定码率,1.0为固定量化值,默认0.6,只用于2-pass和质量模式
<TempComplexityBlur>20</TempComplexityBlur> 根据相邻帧平滑量化值比例的最大值,范围0~99.9,默认20.0,只用于2-pass和质量模式
<TempQuanBlurCC>0.5</TempQuanBlurCC>对统计文件结果平滑量化值比例的最大值,范围0~99.9,默认0.5,只用于2-pass
<SCDSensitivity>40</SCDSensitivity> <整数> 画面动态变化限,当超出此值时插入I帧,默认40
<BframeBias>0</BframeBias> 控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0
<Deblock>true</Deblock> 去块滤波,它作用于每个帧编码之后,但在被用作后面帧的参考之前,开启deblock的片断要比关闭deblock的体积小
<Cabac>true</Cabac> 基于上下文自适应二进制算术编码,有二值化和编码两个过程(二值化:将各语法元素转换为二进制比特序列)
<WeightedBPrediction>true</WeightedBPrediction>B帧加权预测(可以减少相邻B帧质量低的影响)
<AdaptiveBFrames>true</AdaptiveBFrames> 关闭自适应B帧判定(-b设为1时可用,其他不推荐)
<BFramePyramid>false</BFramePyramid> 允许B帧做参考帧
<BRDO>true</BRDO> B帧进行rdo,需要--subme在6以上
<biME>true</biME> 平均B帧参考块运动矢量
<ChromaME>true</ChromaME> 色度块动态预测
<P8x8mv>true</P8x8mv> <B8x8mv>true</B8x8mv> <I4x4mv>true</I4x4mv> <I8x8mv>false</I8x8mv> <P4x4mv>true</P4x4mv> 动态块划分方法,默认"p8x8,b8x8,i8x8,i4x4"。p4x4需要p8x8. i8x8需要--8x8dct(8x8的离散余弦变换)
<AdaptiveDCT>false</AdaptiveDCT> 自适应离散余弦变换
<Lossless>false</Lossless>固定量化模式并设置使用的量化值,范围0~51,0为无损压缩,默认26
<QuantizerMatrix /> 量化矩阵
<QuantizerMatrixType>0</QuantizerMatrixType> 量化矩阵类型
</Settings>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多