|
A. video(视频)部分:
' E+ e7 W, \$ N2 J$ a7 @本部分设定输出的视频码流的类型和参数,大部分参数在模版中已经固定。! Q% S/ m7 }$ A5 x4 V
1)基本类型:有mpeg1/mpeg2,mpeg1用于vcd, mpeg2用于svcd/dvd.: R1 G- _1 q4 i/ ~; }8 h5 K
2)大小:PAL vcd标准为352x288, pal svcd标准为480x576, pal dvd标准为720x5767 L( H( k: `( E ~* C6 S& K
3)画面宽高比:一般应该用4:3 625 line PAL, 这是电视机的屏幕比例
6 d8 V) r3 W0 x4)桢率:pal 的标准为25fps0 @- a$ t6 S$ a7 J
5) 码率控制:码率控制算法是造成各种编码器编码效率和质量不同的关键因素。
: c* n5 c: X6 u0 C/ B6 v4 c+ G; Gmpeg标准中并没有对次算法/ s. O0 Q/ g! c9 K; o
的具体实现做规定,这通常也是商业版本的知识产权内容。# d8 w4 A( Z* s6 G" H9 a& l# P1 x
CBR, 固定码率:保持码率基本维持在平均码率。实现简单,对复杂场景会因码率不足造成马赛克现象,; X) m& n+ E/ Q Z# a, m
对于
8 l/ z q% o; j% v5 u简单场景则不能充分利用编码空间。(这里讲的复杂场景是指细节/边缘丰富以及快速变化场景)。( F* [, V i1 n# F
VBR, (2-pass VBR), “二次处理VBR”。,- b6 S4 x3 }% d* o! `* x
认为其意思是通过对整个视频源进行2次处理使编码效率最高:
( M0 D4 Y+ z" y8 W$ Y第一遍判断何处为复杂场景和简单场景,第二遍根据码率的上下限,把码率重新分配更多给复杂场景。- d4 A3 z* N: C3 p. }4 B. U& l- f. M7 j" H
可以在实验中看出, tmpgenc在进行这种编码时进度指示在50%以前是没有预览图象的, n# O. X( R+ r6 q4 O3 V
而且桢进度指示为0。所以建议威龙改译为“二次处理”。7 {0 M; j$ m, a
这种码流控制方式应该在给定码率下得到最好的质量,但是和具体2 次分配算法关系很大。
- j# V* |0 f, C9 S+ C R6 A3 o同时耗时最长。一些其他编码器甚至有3次处理的码率优化。% F5 _: K0 A" }+ z' k
MVBR (手动可变码率),设定最大码率和对不同的帧类型设定不同的信息损失量,实现局部码率优化。
! T& r8 ?* Q7 b* q3 S可以通过手工指定复杂场景为I帧对之进行较精细的编码。参见对于GOP参数设定部分。4 W4 j, n# i- e- |
CQ-VBR (自动可变码率),设定主观质量值和码率上下限,以主观质量标准对编码器量化环节进行控制,9 t3 o+ m a% D- @% m0 d
在可 选参数中设定主观质量值以后,编码器就在能达到此质量标准的前提下尽量节省码率。
( |: k7 q1 m* U- d# Q, {: i关键在于编码器对主观质- X7 Y6 ]: [/ h* L
量的评价方法。这是CQ和VBR的综合,也可以看作自动的MVBR。
9 z& W7 Y' ?9 e3 C' v; P2 Z威龙汉化5版 在可选参数中有一行是“不破坏最小码率的状态而填充数据”,
" f h5 P) E/ l理解是,如果码率过低就填充无意义码(好浪费啊,不过可能是为了兼容性的原因),
& g( k* v5 `8 g9 k英文版这一句没有翻译,还是日文。! `3 z' W, U0 i, P: a, E6 l
CQ (固定品质),就是比MVBR多了一个主观质量值的设定。
9 T) `2 \+ z9 U( H9 {9 U- T* D# p& QRT-CBR (实时固定码率):连GOP层次的码率优化也不做了的CBR,快一点,质量不高7 E: x$ Z" Y" _: o% i; E
RT-CQ (实时固定品质):连GOP层次的码率优化也不做了的CQ,快一点,质量不高, E- Y% t8 Z( p
6)码率:这个码率是指CBR方式下的平均码率 ?: q+ [' ~6 f6 E
7)VBV缓冲区大小:缓冲区大的话,编码优化会好一些,但是解码的时候也要求大一些的缓冲区。/ N) M" n& e" l# ?' p, e5 o4 v
因此,vcd/svcd标准中参数是固定的,否则可能机器无法播放。( |+ o7 X9 w" K E
8)Pofile & level(类别与级别): 这个参数是mpeg1没有的。3 N: c- T! p. G) |, c e9 E$ d
在svcd/dvd应用中应该是MP&ML,模版自动选定。
- Q( P1 V: F: a# H6 mMP&HL是为HDTV定义的,分辨率可以高达 1920x1100 .
+ t- d, U9 ]% {" A$ |, h7 p9)制式:好象这个也是mpeg2相关的参数。我们应该用PAL.$ b- G, f# V5 K4 b r9 e
10) 隔行扫描:mpeg1只支持逐行扫描(25 frame/sec),mpeg2可以选择隔行(50 field/sec)。( \9 d3 M$ |+ ^6 U+ @! K9 C
如果成品在电视上播放,建议选择隔行,使运动平滑。但是隔行的视频在pc上看会有毛刺现象,% c& ?9 e2 j# W3 \! _$ P* K3 N0 Y
在水平运动景象中尤其明显。
0 P" H+ F* v+ M: t11)播放时实现3:2下拉: 这是在film/NTSC制式转换中需要的,即在编码时维持帧率不变,
3 v& R0 i: M- O' n+ P不做3:2下拉,而在播放中实现。参见B.advanced部分。感谢威龙指正。
/ b- V, z2 |% s2 d ^12)YUV格式:给亮度/红色差/蓝色差分配的码位。对于人眼来说,亮度信号
( R+ `, f1 J4 W% f1 ^9 C$ o是最敏感的,所以就分配比较多的编码空间以求精细,对于色差则粗糙些。一般就是4:2:0了。
% Q) x# p/ R r7 R( i) R& e(其实4:2:0方案给蓝色差的码位不是0,不知道为什么这样写): a( R0 U: L( y5 C; B7 M
13)DC分量精度:在mpeg编码中需要对8x8的图象块进行DCT(离散余弦变换),
3 _2 D- I4 C F6 P6 o3 W$ ~) iDC分量的意义基本是代表8x8块中的平均值,一般需要为之分配比较大的编码空间,5 N6 Q3 r2 ~; h- \0 p
否则马赛克的边缘效应就比较明显。(8bit就不小啦,图象压缩中是每个bit的油水都要榨干的)+ I! {, W; q6 l8 m3 s
14)运动检测精度:mpeg是对I帧进行帧内编码,对P帧进行预测误差编码。就是对于P帧的图块,& R! G2 g7 E3 L$ E# W) O, l
在I帧中寻找对应的部分,然后对两个图块的差异部分进行编码,可以大大节省码率。" ]9 @0 B0 N& `( ^1 a$ |3 ]7 G
运动检测精度越高,图块搜索匹配的范围越大,编码效率越高,同时编码速度越慢。! a9 }5 j& O3 j) l( k3 E( q* W# Q" c
这部分算法同样没有在mpeg标准中定义,各个厂商实现水平相差会很大。! i* Z* u n& J2 d8 b# W" h
一般来说,在 tmpgenc中设置为普通即可。
" \% t3 E* V j1 O$ v2 q' E% {; [" o5 d- g8 Q9 w% H' A
B. Advanced (影象源)部分:
8 n+ s6 G4 V& o7 p5 A1 F# |本部分设置视频源相关的参数,以及在编码之前对视频源进行的预处理。5 v7 E/ ^2 o9 w( [4 U
1)视频源类型:隔行扫描/逐行扫描。这个参数在打开视频源文件的时候会对之自动判断设置。
. F5 }( s) W4 m# r4 c. ltmpgenc12版不能自动识别type1 DV,在12a版本中已经解决。参看的编码测试页。
' @2 Q+ c6 {& e5 x/ X0 r2 k7 ~3 t2)场顺序:这是整个 tmpgenc甚至整个桌面视频领域中最混乱的一部分。9 A* L4 K% x* P% T1 n8 G$ K9 w
tmpgenc12a好象也不能根据视频源自动设置这个参数.
8 W f, I: z+ m在这个问题上搞了很久,才算明白了一点。这个参数是至关重要的,设置反了会造成生成6 A; Q8 Q) j4 i5 Q) b
图象的明显闪动,打个比方,一个物体的运动位置次序本来是1-2-3-4-5-6-7。。。,
. ~4 J$ v, B9 ~) ~2 Y) l设置反了以后就成了2-1-4-3-6-5-8。。。对于模拟视频源,其场序是由捕捉卡类型决定的,
4 n: T4 g: |( j2 g" t对于dv,则定义为field order A。讲到这里还没有什么麻烦,但麻烦的是虽然场序只有2种,8 W. t- m- G% S3 |8 B/ ?, A" g `
对于他们的叫法却有3种:0 O' H. g7 w0 \/ X
field order A/B (在ulead软件中的叫法),, e+ R6 u* M& F& {$ F0 @
even/odd line first ( tmpgenc的叫法)," B- P m7 f" m% `
field top/bottom first(bitrate viewer叫法),这3种叫法之间的对应关系是最让人头疼的。
# x1 o X1 U4 J# V1 }% z在英文版的 tmpgenc12a中,缺省的设置为“even line first (field A)”,,
* Y% z& c( J+ @ ~5 d+ `2 t但在威龙汉化中缺省设置为“奇数场->偶数场”,曾就此请教威龙,威龙讲这是日文版的原意,
# P$ O7 S- W/ p* ? X( Y2 z注意不要在字面上混淆了.
5 W! e' X* F1 @总之,3种叫法的关系是这样的:* ^+ l+ N. J! _; \: x
field A = even line first(奇数场->偶数场) = field bottom first。 最可靠的方法,是用不同的/ E" e7 G" r9 N7 ?$ ?8 Y6 C. ^
设置对高速运动场景各生成一段隔行扫描的视频,并在电视上观察,应该能够看到差别。
7 r8 r) D; c3 h* r3)视频源的宽高比: tmpgenc可以自动识别设置,一般应该为4:34 X# Q+ g0 b5 B' C0 h6 F& r1 g
625line PAL.
0 A& [, Q7 ?3 R, A6 _4) 画面显示比例和位置: I, i" K4 M* o' f& n3 M
一般选用“全画面显示并宽高比不变”,
* k2 L4 ^; Z; E7 b所谓“全画面显示并宽高比不变2”选项可能是会造成部分画面不可见,没有尝试过这一种。
% n' b( l* D: ^# S+ |: j在4:3视频源中可能没有差别,但对于16:9宽屏影象在 4:3屏幕上输出而言,
- z' `2 `3 w1 N1 V8 O8 `“全画面显示并宽高比不变”是在上下留出空白," B/ P2 X9 i s+ {4 p& |
“全画面显示并宽高比不变2”会截掉左右两端画面。。。没有这样试过,
' _9 h3 q( W. f) B" i- e, Q仅为猜测,不正确的地方请朋友们指正。 u! Z4 g9 d- U2 x/ R5 v4 W
5)滤镜选项组:/ i9 F4 ~2 ~) @: {, ~
这一组设置可以对视频源进行预处理以提高影象质量。
+ W9 p& w6 F9 D' H0 B2 ?" D一般来说,都是在非编软件中实现这些功能的。: x- u; O% V4 D% Z D1 F/ E9 d& t) P! L
另外,对滤镜的使用要适度,因为客观上任何滤镜的使用都是引入了信息损失,
# F1 P9 m6 I h; }5 `这是对低品质视频源提高主观质量的代价。
4 u* p, Y3 B/ q9 p影象源范围:选取部分影象源进行压缩# B( y* A) t4 h" k/ m5 t
24fps化:24fps是电影标准,一般不选
0 ]: r5 B4 x- L. E消除鬼影:鬼影是影象的重影,视频源不好的时候会出现。在dv中没有遇到过。
+ h2 v- h. E5 |+ p消除噪音:在低光条件下的拍摄中影响中回出现明显的颗粒噪声,利用此滤镜可以消除。
& G4 ^0 r' O' Y- z3 _6 j; g$ A不过副作用是平滑了图象,
" h! n9 D; l7 ]比如人的面部会象橡皮娃娃一样,光滑但没有质感。
: T0 ]' i2 f; b" Q) c: U锐化边缘:可以对横向/纵向边缘分别设置参数,做增强处理7 u/ R, u: P/ ^; |
简单色彩矫正:调整亮度,对比度,gamma,色度等4 @" T3 X7 d7 K; k$ @$ v: e
高级色彩矫正:可以按照不同的色彩空间RGB/YUV等进行色彩矫正
. E" o! c4 T$ w" ?# ~( [消除交错信号(de-interlace):把隔行扫描的视频源转换成逐行扫描的视频,6 {9 _% S. X' e
如果对输出的视频设置为隔行扫描(如在打算电视上播放的svcd/dvd),则不要选用。1 W& n* b) m" z1 I* b( \5 g
认为在做vcd(逐行扫描mpeg1)时候也未必需要选用,要看视频源的大小决定。2 k3 C+ U8 q: T' g
比如用dv 576线,在做vcd时候只需要288线,简单舍弃一个场就可以,不需要deinterlace.
1 Q/ s1 V% j! _' v( |相反,如果视频源是352x288的隔行扫描视频,则需要做de-interlace.
6 N; c L; e2 I7 l: C- T裁减画面:由于电视机播放视频的时候对边缘四周的部分做舍弃,
0 \% q# V# t1 U& l1 B! h所以可以利用这一点只对可见部分进行编码,这样可以加快编码速度,8 u4 k }% w8 P4 L. @) h) l$ g1 d
并且因为节省的码率可以利用在未裁剪区域从而提高画面质量。一般来说对上下左右各裁剪5%是安全的。
& V: O2 t7 F7 _1 p! k0 |! U$ x3:2下拉:因film 24fps和 NTSC 30fps帧率不同,在制式转换中所需要做的调整。一般不用。
# A, |) m# f2 T8 X# _ J, \1 K帧率不变:没什么好讲的" m: R# X6 f! J
声音处理:可以增大/减小音量,并做声音的淡入/淡出。. l& b# Y. p& `$ R
3 f/ v: y5 {6 L: H9 \& oC. GOP结构1 G+ K# f M6 [ x0 `0 q
GOP = group of picture. 在mpeg中一个GOP就是一组时间上连续的画面。
* _# @% ^3 q+ c6 ^3 `' impeg中的画面分为3种:I,P,B.I是内部编码帧,编码方式基本上就是jpeg的格式。
# c7 l: K' \2 jP是前向预测帧,编码方式是使用运动检测误差编码,参看A部分对运动检测的说明;; s; o4 z0 {1 G) ^/ o
B是双向内插帧,根据前后I/P帧进行插值运算,对插值误差进行编码。
5 ?& e8 }8 d- {) _# o建议一般不要修改GOP结构,以取得压缩比例和图象质量之间的最好平衡。6 G8 A; N3 d6 N! M4 ~0 Q1 `2 R' a
极端的例子是只用I帧,图象质量会有保证,但码流会很大。
2 r" K# g8 J6 @1)输出编辑用的码流:这个选项会把GOP最后的B帧取消。因为B帧是双向内插的,) T* Y/ T e/ A# `1 G2 p
其编码/解码不仅需要以前的I/P, 也需要以后的I/P帧。
0 q; R) { [0 X取消最后的B帧,可以去除GOP之间的依赖性,从而便于编辑。( W0 s3 K/ V* J6 e0 Z
2)检测场景变化:对于快速变化的场景,强行设置为I帧,以保证画面质量
; O9 R( O# D; q- u" J2 r$ }9 y1 {3)手工强制设定帧类型:手工设定需要精细编码的画面帧为I帧。5 \4 w5 g) } n8 i& I: D5 s
结合MVBR码流控制可以全面控制码流分配。
& ]5 h. B1 t+ q l3 q! W* `) S. w, u , Z8 l9 n w6 x2 W3 @
D.量化矩阵% j% {# T3 T8 B- p$ @1 t* k" y
mpeg中的量化是对8x8 YUV 信号图块进行DCT变换之后的系数的量化。
, s9 m; U+ K( u; A' [通过对高频分量使用比较大的量化阶从而达0 D" u0 E8 u2 ~# R2 n
到减小高频分量的编码空间,达到压缩的目的。代价就是丧失图像细节,边缘模糊等。
: q# B/ I |6 y1)帧内编码量化矩阵:这是指对I帧使用的帧内编码量化矩阵
' D1 N% f" ]; v/ m2 `/ X' H& G2)帧间编码量化矩阵:是指对非I帧的帧间预测误差编码所用的量化矩阵。威龙汉化版中叫外部矩阵。3 t; W# F# R* c7 T" |8 x" N
3)矩阵模版的选择:建议对一般的视频选用mpeg标准,可以看到,其帧间编码矩阵统一为16,7 t* _1 I" H! B( A0 ?) g
这是因为帧间误差已经抵消了低频分量,高频分量丰富,所以和帧内编码矩阵有所不同。$ n" H7 a+ I9 g1 e1 E0 s9 y
对于计算机动画尤其是2维线条为主的动画,
& E/ l6 M; j0 y r建议选用CG模版,,可以看到因为CG本身高频信号丰富,其帧内编码矩阵也统一为32。% `$ Z9 L6 e! M) _
另外,有朋友尝试减小量化矩阵的各个数值,认为这样做的意义不大。
- S- S/ Q# t+ s0 J5 g e: Q) t因为量化矩阵并不是量化的唯一因素, 事实上的量化程度要根据码流控制部分的反馈信息而自适应调整。
+ ]0 D1 R* f# G' ]/ M这样,即使量化阶减小,在码率有限的前提下,
6 N$ I2 k! @ s8 I4 e. ^$ S" K$ k0 @量化系数还是会加大的。。0 b' x2 K' K/ s. p
4)YUV输出为YCrCb: YCrCb色彩空间分配给Y亮度信号的编码空间更大,如果视频源是YCrCb格式的话,
8 i. a$ R/ B: ]7 T- O8 i这个选项 可以增加画面质量。。不过一般都是采用YUV(CCIR601),$ B* e G. N- k0 U5 H$ R
如dv,所以不要选择这个选项,否则白白浪费码率。6 A. w" f" c6 `7 Z% ?7 N
5)浮点离散余弦变换:整点运算的速度比浮点要快很多,但精度不如浮点。
- D$ _' {, l, v! i猜测这里的浮点其实只是把DCT变换的系数从8bit增大为16bit的精度,
" e1 l) r% S# y& W$ [并不需要浮点运算器单元参与变换,否则速度是不可忍耐的。
# \& e, z7 W4 g4 t6)不对静止部分做半像素的运动检测:由于视频源是隔行的,对于精细的静止边缘线条(1个像素宽度)
; N. W' D7 _8 ~- A" q8 `比如静止字幕会出现一个场中出现,另一个场中不出现的闪动。选中这个选项会消除闪动。。( \- W8 W# {* A% e) D; v2 S
不过觉得好像这个和量化矩阵无关。; i7 r$ w" G. n3 U
7)柔化马赛克:没什么好说的。就是在8x8图块的边缘做一些特别处理。7 U. T. o: _& @' ~1 s
能用足够的码率或者码率控制手段解决马赛克最好,
1 [2 N; K( z* _+ r X3 V因为这里的柔化虽然只对边缘进行低频滤波,毕竟还是会对画面造成影响模糊化。
/ G% O, B6 F9 G `7 S, N D$ j3 k, o8 s1 m9 v& T2 `1 e' Q+ C
E. 音频:1 F. A2 N' q+ B
这部分大多不需要改动vcd/svcd模版。也没有大的影响。不多讨论。
& s3 z) ]/ b9 u* O# G1 G8 f4 r; V
" Q3 |9 _: [; R) E& }0 m* _F. 系统:
% y: z3 f1 {! a6 j+ n& kmpeg的系统是指视频+音频。vcd/svcd/dvd模版中已经设定好。(; w% G4 u; W Y* }) l. V$ X
3 r6 R4 q, ^# `
[ 本帖最后由 goodskycn 于 2011-7-27 19:05 编辑 ] |
|