已收到118个关心
其他人正在看
管理员已在审核
问题已提交审核
关注“3x社区”接收问题审核提醒
长按下方图片识别二维码即可关注
金额(元)
宝宝您得先登录哦!压制入门教程(未完成 11/30更新) - CSDN博客
压制入门教程(未完成 11/30更新)
作为紫荆官方压制小组DreamHD的创始人之一,写这篇blog的目的旨在于为了那些想要入门压制的同学提供一点指导,同时为DreamHD压制小组手册做准备,也是自己学习压制的一点一滴的记录。所以,这之中可能会有非常多的错误。由于没有大段的空闲的时间,所以就平时写写blog,做一点记录。
压制作为各大PT站的关键部分,各个小组都有自己独特的压制“技巧”。各个压制小组的风格也不尽相同,国内的小组普遍拼的是速度,而国外的小组往往拼的是“质量”。但总体来说基本都属于“裸压”。即不挂载任何滤镜,直接使用x264进行视频的压制。对于三次元的电影来讲,需要使用滤镜对画面进行修复的地方较少,一般PT压制小组使用最多的就是debanding了。更多的更为复杂的滤镜他们也不会使用。而且三次元压制小组普遍喜欢在x264的设置参数穷尽自己的想象力,各种各样的设置都有。但是我想真正对自己的参数做过深度测试也就少而又少了吧。压制的一条原则就是除非你知道自己在做什么,否则不要轻易的想当然的更改那些参数。因为x264的开发者显然比我们更清楚对于不同的片源如何设置相应的参数。所以doom9的大神更为推荐使用preset+tune的压制方式。相比于三次元,二次元压制小组就显然不同了。他们大多人都有较长的后期经验,见识过各种各样的片源,其中不乏奇葩的类型。处理的难度远非三次元的BluRay可比。俗话说的好,久病成良医,所以他们的技术水平一般远高于三次元的PT组。较为著名的二次元压制小组有(排名不分先后):mawen1250,VCB-Studio,philosophy-raws,ANK-Raws等等等等。
解码与编码
我们平常使用播放器观看视频,其大概分成这么几部分:
分离器分离-&视频解码器解码-&视频渲染器渲染输出
分离器分离-&音频解码器解码-&音频渲染器渲染输出
也就是说,在一个视频文件中,或者是叫container中,视频流,音频流等是分开存放的,我们可以使用分离器将它们分离开来,分别进行操作。
严格意义上的编码指的是将raw文件编码压缩(有损/无损)成某一种格式,对于音频raw是wav文件,而对于视频其中一种是yuv文件。
wav-&flac, wav-&aac
yuv-&h264, yuv-&xvid
我们这里一般拿到的都是经过编码的视频文件,比如蓝光的m2ts,TV录制的ts格式等等,所以我们的第一步就是将它们分离解码成raw格式再进行编码。x264本身已经集成了ffmpeg,所以这一点我们不需要担心了。或者我们使用avs的话,其中的源滤镜那一步就相当于分离和解码了。
那么我们编码压制的整个过程大概就是:
分离解码视频源-&编辑处理视频源-&编码视频源-&封装
分离解码音频源-&(编辑处理音频源)-&编码音频源-&封装
1. 相关工具(括号内为当时的最新的版本号)
AviSynth(2.60)
开源的非线性视频编辑处理工具,以脚本的方式实现对视频的编辑。同时是以frameserver的方式工作的,所以并不产生中间文件,但是编辑过后需要重编码来生成目标文件。
AviSynth+(r1825)
AviSynth+是ultim使用C++重新改写的AviSynth版本,力求高效和简洁。其实AviSynth也好AviSynth+也好,都是AviSynth,其本身有两点重大的缺陷,就是缺少有效的内存管理以及多线程处理优化。而现在正在开发的基于Python的VapourSynth将会成为AviSynth很好的替代品。
AviSynth Filters
AviSynth处理视频都是基于相应的滤镜来实现的。比如,想要对视频切边,需要crop滤镜,想要转换1080p到720p,需要resize滤镜,想要去色带,需要debanding滤镜等等。
AvsPmod(2.5.1)
可以认为是书写AviSynth脚本的IDE,带有代码补全功能以及语法高亮功能。最主要的是具有视频预览功能,可以查看视频处理后的效果。
不过建议大家下载这个我编译的版本,基于作者最新的git,支持avs+等。
VapourSynth
基于Python的非线性视频处理frameserver。
x264(0.148.2651)
最为优秀的开源***C/H.264编码器,始于2003年,从当开源社区的MPEG4-ASP编码器Xvid小有所成时开始的,经过几年的开发,特别是Dark Shikari加入开发后,x264逐渐成为了最好的视频编码器。
x264有几个mod版本,相比于官方编译的版本多了一些大大小小的patch,提高了x264的稳定性,集成了一些其他的工具比如ffmpeg,l-smash等等,比官方版本好用许多。主要现在网上用的多的是tmod,7mod和kmod版本,据说还有一个smod,不过我也没怎么见过。
tmod版是由06_taro大大mod的x264版本,在NMM仍然可以看到这个帖子:
添加了ffmpeg/libav,lsmash,libutvideo,libvpx,ffms2等工具,还有很多的patch,具体可以参考:
但是taro大大也很忙,tmod版到2431就一直没有再更新过了。
7mod版是由free077go大大一直编译的版本,据说代码也是基于tmod的,所以可以说也是tmod版的一个更新版本。而且保持与官方git的更新,是楼主一直在使用的版本。
下载地址:
free077go大大每次更新都是非常及时的,下载地址是他的度盘链接。也推荐大家去他的度盘看看,里面有很多有用的工具,包括最新的LSMASH-Works源滤镜。
kmod版主要是老外用的多,MeGUI一直用的就是kmod版的x264。其实我们一般使用应该感受不到区别。
开源的基于HEVC/H.265的编码器,是在x264的基础上进行开发的。仍然正在开发中,但是已经有些二次元压制小组开始使用,已经取得了不错的效果,但是就是计算量相比于x264大了很多,压制时间较长。
推荐大家使用msg7086大大mod的版本:
MKVToolNix(8.5.2)
开源的优秀的mkv工具包,包括mkvmerge,mkvextract等等。非常好用,作者的更新也非常频繁,每天都在github上commit,平均一个月一个版本更新。
L-SMASH(rev 1362)
开源的mp4mux工具包,包括muxer,remuxer,boxdumper和timelineeditor。主要常用的是muxer和remuxer。据说在兼容性和稳定性上是比基于GPAC的MP4Box要好。
项目地址:
下载地址:
十分优秀的开源的编码解码视频音频处理方案。可以说如果没有ffmpeg,就没有我们今天的影音生活。各种各样的视频播放器,音频播放器都使用ffmpeg中的libavcodec库。
下载地址:
eac3to(3.31)
doom9上的大神madshi开发的一个十分好用的音频转换处理工具。
qaac(2.55)
一个基于Apple QuickTime SDK的一个AAC编码器,所以需要***AppleApplicationSupport。这个文件可以从iTunes中得到,可以使用7-zip打开iTunes***文件,提取出AppleApplicationSupport.msi这个文件***即可。
或者选择我这个打包的版本,解压即用:
首先我们可以看看官方help:
Usage: qaac [options] infiles....
"-" as infile means stdin.
On ADTS/W*** output mode, "-" as outfile means stdout.
Main options:
Show available AAC formats and exit
-a, --abr &bitrate&
AAC ABR mode / bitrate
-V, --tvbr &n&
AAC True VBR mode / quality [0-127]
-v, --cvbr &bitrate&
AAC Constrained VBR mode / bitrate
-c, --cbr &bitrate&
AAC CBR mode / bitrate
For -a, -v, -c, "0" as bitrate means "highest".
Highest bitrate available is automatically chosen.
For LC, default is -V90
For HE, default is -v0
HE AAC mode (TVBR is not available)
-q, --quality &n&
AAC encoding Quality [0-2]
ADTS output (AAC only)
--no-smart-padding
By default, beginning and ending of input is
extrapolated to achieve smooth transition between
songs. This option also works as a workaround for
bug of CoreAudio HE-AAC encoder that stops encoding
1 frame too early.
Setting this option can lead to gapless playback
issue especially on HE-AAC.
However, resulting bitstream will be identical with
iTunes only when this option is set.
-d &dirname&
Output directory. Default is current working dir.
Show library versions and exit.
-A, --alac
ALAC encoding mode
-D, --decode
Decode to a W*** file.
Output to CAF file instead of M4A/W***/AAC.
Decode to a WaveOut device (playback).
-r, --rate &keep|auto|n&
keep: output sampling rate will be same as input
if possible.
auto: output sampling rate will be automatically
chosen by encoder.
n: desired output sampling rate in Hz.
--lowpass &number&
Specify lowpass filter cut-off frequency in Hz.
Use this when you want lower cut-off than
Apple default.
-b, --bits-per-sample &n&
Bits per sample of output (for W***/ALAC only)
--no-dither
Turn off dither when quantizing to lower bit depth.
Scan + print peak (don
Cannot be used with encoding mode or -D.
When DSP options are set, peak is computed
after all DSP filters have been applied.
--gain &f&
Adjust gain by f dB.
Use negative value to decrese gain, when you want to
avoid clipping introduced by DSP.
-N, --normalize
Normalize (works in two pass. can generate HUGE
tempfile for large piped input)
--drc &thresh:ratio:knee:attack:release&
Dynamic range compression.
Loud parts over threshold are attenuated by ratio.
threshold (in dBFS, & 0.0)
compression ratio (& 1.0)
knee width (in dB, &= 0.0)
attack time (in millis, &= 0.0)
release: release time (in millis, &= 0.0)
Apply smart limiter that softly clips portions
where peak exceeds (near) 0dBFS
--start &[[hh:]mm:]ss[.ss..]|&n&s|&mm:ss:ff&f&
Specify start point of the input.
You specify either in seconds(hh:mm:ss.sss..form) or
number of samples followed by
cuesheet frames(mm:ss:ff form) followed by
--start 4010160s : start at 4010160 samples
--start 1:30:70f : same as above, in cuepoint
--start 1:30.93333 : same as above
--end &[[hh:]mm:]ss[.ss..]|&n&s|&mm:ss:ff&f&
Specify end point of the input (exclusive).
--delay &[[hh:]mm:]ss[.ss..]|&n&s|&mm:ss:ff&f&
Specify amount of delay.
When positive value is given, silence is prepended
at the begining to achieve specified amount of delay.
When negative value is given, specified length is
dropped from the beginning.
--no-delay
Compensate encoder delay by prepending 960 samples
of scilence, then trimming 3 AAC frames from
the beginning (and also tweak iTunSMPB).
This option is mainly intended for resolving
A/V sync issue of video.
--num-priming &n&
(Experimental). Set arbitrary number of priming
samples in range from 0 to 2112 (default 2112).
Applicable only for AAC LC.
--num-priming=0 is the same as --no-delay.
--gapless-mode &n&
Encoder delay signaling for gapless playback.
0: iTunSMPB (default)
1: ISO standard (elst + sbgp + sgpd)
--matrix-preset &name& Specify user defined preset for matrix mixer.
--matrix-file &file&
Matrix file for remix.
--no-matrix-normalize
coefficients for the matrix mixer.
--chanmap &n1,n2...&
Rearrange input channels to the specified order.
--chanmap 2,1 -& swap L and R.
--chanmap 2,3,1 -& C+L+R -& L+R+C.
--chanmask &n&
Force input channel mask(bitmap).
Either decimal or hex number with 0x prefix
can be used.
When 0 is given, qaac works as if no channel mask is
present in the source and picks default layout.
--no-optimize
--tmpdir &dirname&
Specify temporary directory. Default is %TMP%
-s, --silent
Suppress console messages.
More verbose console messages.
-i, --ignorelength
Assume W*** input and ignore the data chunk length.
--threading
Enable multi-threading.
-n, --nice
Give lower process priority.
--sort-args
Sort filenames given by command line arguments.
--text-codepage &n&
Specify text code page of cuesheet/chapter/lyrics.
Example: 1252 for Latin-1, 65001 for UTF-8.
Use this when bogus values are written into tags
due to automatic encoding detection failure.
-S, --stat
Save bitrate statistics into file.
--log &filename&
Output message to file.
Option for output filename generation:
--fname-from-tag
Generate filename based on metadata of input.
By default, output filename will be the same as input
(only different by the file extension).
Name generation can be tweaked by --fname-format.
--fname-format &string&
Format string for output filename.
Option for single output:
-o &filename&
Specify output filename
Encodes whole inputs into a single file.
Requires output filename (with -o)
Option for cuesheet input only:
--cue-tracks &n[-n][,n[-n]]*&
Limit extraction to specified tracks.
Tracks can be specified with comma separated numbers.
Hyphen can be used to denote range of numbers.
Tracks non-existent in the cue are just ignored.
Numbers must be in the range 0-99.
--cue-tracks 1-3,6-9,11
-& equivalent to --cue-tracks 1,2,3,6,7,8,9,11
--cue-tracks 2-99
-& can be used to skip first track (and HTOA)
Options for Raw PCM input only:
Raw PCM input.
--raw-channels &n&
Number of channels, default 2.
--raw-rate
Sample rate, default 44100.
--raw-format
Sample format, default S16L.
Sample format spec:
1st char: S(igned) | U(nsigned) | F(loat)
2nd part: Bitwidth
Last part: L(ittle Endian) | B(ig Endian)
Last part can be omitted, L is assumed by default.
Cases are ignored. u16b is OK.
Options for CoreAudio sample rate converter:
--native-resampler[=line|norm|bats,n]
Arguments are optional.
Without argument, codec default SRC is used.
With argument, dedicated AudioConverter is used for
sample rate conversion.
Arguments must be delimited by a
First argument is sample rate converter complexity,
and one of line, norm, bats.
line: linear (worst, don
norm: normal
bats: mastering (best, but quite sloooow)
Second argument is sample rate converter quality,
which is an integer between 0-127.
--native-resampler
--native-resampler=norm,96
Tagging options:
(same value is set to all files, so use with care for multiple files)
--title &string&
--artist &string&
--band &string&
This means "Album Artist".
--album &string&
--grouping &string&
--composer &string&
--comment &string&
--genre &string&
--date &string&
--track &number[/total]&
--disk &number[/total]&
--compilation[=0|1]
By default, iTunes compilation flag is not set.
--compilation or --compilation=1 sets flag on.
--compilation=0 is same as default.
--lyrics &filename&
--artwork &filename&
--artwork-size &n&
Specify maximum width or height of artwork in pixels.
If specified artwork (with --artwork) is larger than
this, artwork is automatically resized.
--chapter &filename&
Set chapter from file.
--tag &fcc&:&value&
Set iTunes pre-defined tag with fourcc key
and value.
1) When key starts with U+00A9 (copyright sign),
you can use 3 chars starting from the second char
2) Some known tags having type other than UTF-8 string
are taken care of. Others are just stored as UTF-8
--long-tag &key&:&value&
Set long tag (iTunes custom metadata) with
arbitrary key/value pair. Value is always stored as
UTF8 string.
虽然参数众多,但是我们一般使用的主要参数只有那么几个。
首先是编码模式,作为一个优秀的AAC编码器,包含ABR、TVBR、CVBR、CBR四种编码模式。
ABR: AAC Average BitRate mode / bitrate
TVBR: AAC True Variable BitRate mode / quality [0-127]
CVBR: AAC Constrained Variable BitRate mode / bitrate
CBR: AAC Constant BitRate mode / bitrate
关于AAC的这几种编码模式,区别如下:
oHard CBR: no bit-reservoir, every frame (21.5-43 ms) has the same bit consumption (e.g. -hard-cbr in Opus)
oSoft CBR: small bit-reservoir, for example one with the size given in the MPEG standard (e.g. Fraunhofer CBR)
oABR: large bit-reservoir, maybe up to a few seconds. Entirely up to the developer (e.g. ABR in Nero’s encoder?)
oCVBR: very large bit-reservoir, maybe up to a minute. Entirely up to the developer (e.g. CVBR in Apple’s encoder?)
oTVBR: maximum bit-reservoir, every frame and channel may use between ~10 and 6144 bits (e.g. Apple’s or Fraunhofer’s VBR)
简单来说,ABR与CVBR的区别就是bit-reservoir的大小,其结果都是使编码结果的平均码率接近指定码率,但不一定相等,类似于x264的2pass模式。即中间的即时码率随着复杂度可高可低,但是最终结果的平均码率与指定的码率接近,限定了编码文件的最终体积。TVBR则是尽可能大的bit-reservoir,类似于x264的crf模式,指定一个quality step,来进行编码,目标文件的最终码率我们事先并不能知道。CBR模式则是简单粗暴许多,所有场景的码率都相同,复杂度高的场景与复杂度低的场景给予同样多的码率。
一般来说,我们主要用的是CVBR和TVBR两种编码模式,因为这两种编码模式编码效果较好。
关于qaac的输入文件,根据我这里的测试,默认是支持wav,m4a,mp3的,如果使用上面我打包的版本的话,还支持flac和tak。
大家可以使用命令
进行检查。
根据官方help,使用方式如下:
qaac -v 256 audio.wav -o audio.m4a
qaac --cvbr 256 audio.wav -o audio.m4a
这里指定256Kbps作为目标码率,audio.wav是我们待压缩的音频文件,audio.m4a是编码出来的AAC文件。--cvbr 256也是苹果iTunes Plus商店音乐的编码模式。
与CVBR不同,TVBR需要我们指定quality step,相当于一个码率因子。
根据官方help,使用方式如下:
qaac -V 109 audio.wav -o audio.m4a
qaac --tvbr 109 audio.wav -o audio.m4a
quality step的数值是0-127,数值越大,码率越高,质量越高。但是quality step的取值并非是0-127的全部数值,而是只有15个实际的quality step。分别是:
actually functional quality steps
其他输入值则会选择一个最接近的值作为输入。至于如何选值,qaac的作者是这么说的:
63 might be a good place to start with. Since it’s positioned at mid center, you might take it as “mid quality”. However, its typical bitrate for redbook format is around 128kbps or so, which is usually considered to be good for AAC (remember iTunes music store has been using 128kbps ABR, before iTunes plus has come out). Of course, noboby but you can decide which setting is appropriate for you. Decide by yourself using your ears.
一般我个人的选值是在100以上,虽然编码出来的体积会大一些,但是也不会大多少。这个还是需要各位自己分辨。
更多的内容还是推荐大家看看作者的wiki:
1. ***S PART
一般来讲,我们对于视频的控制在于两个地方,一个是编码前,一个是解码后。编码前指的是我们在使用encoder重编码源视频前所做的对源的处理,就是我们这里的***S PART,比如进行crop,resize,debanding,denoise等等。 解码后指的是在播放的时候源经过解码器解码之后产生的YUV视频流对其进行后处理,包括反交错,IVTC,debanding等等。区别在于解码后的处理是随着播放实时的。
我们通过***S脚本实现对于源的处理,这里我们使用AvsPmod作为我们书写***S代码的IDE。
源滤镜的任务是解码源并将其载入,不同的源滤镜对于不同的视频源解码能力不同。这里我们常用的源滤镜有L-SMASH-Works,FFMS2,DGDecNV(Non-free)…
L-SMASH-Works(推荐)
L-SMASH-Works中有4个源滤镜,包括两个视频源滤镜和两个音频源滤镜。分别为LWLibavVideoSource和LSMASHVideoSource,LWLibavAudioSource和LSMASHAudioSource。我们这里主要使用的LWLibavVideoSource这个源滤镜。LWLibavVideoSource和LSMASHSource的区别:
LWLibavVideoSource is basically a FFmpegSource alternative, which can be used without an index file. (index file will be created if cache is set to true)
LSMASHVideoSource is a mp4 source filter.
当我们的视频源的格式是mp4时,我们可以优先使用LSMASHVideoSource,这样既不用生成索引文件,同时结果更为准确。
LWLibavVideoSource("E:\Movie\video.m2ts")
LSMASHVideoSource("E:\Movie\video.mp4")
然后在AvsPmod里面press F5进行刷新,会出现假死的情况,这是在生成所需要的lwl引导文件。
关于源滤镜的索引问题,这里引用06taro大大在NMM的一段话:
为什么要索引?
这么说吧,譬如我一个滤镜要请求文件的第1000帧,我如何知道这个第1000帧的数据在这个文件的什么位置?
如果格式头部自带index,要请求第1000帧,就可以从头部读取index,然后找到第1000帧的entry point,直接跳到那个位置,然后解码取出第1000帧
如果格式没有自带index,我该怎么办?根据文件总帧数和体积猜测到底在哪儿?甚至有些格式连总帧数都没有时怎么办?从头开始解码一直解码到第1000帧么?如果这样的话我突然要非线性请求第100000帧又怎么办?
所以需要有一个index的过程,将整个文件分析一遍,之后就知道每一帧在文件中的位置,之后请求帧的时候可以顺利进行。和有几个文件没有关系,只和格式本身有没有内建index相关。
理论上像mkv、mp4这种文件是不需要预先index的,直接从头部就可以读取entry point,像DSS2读取mkv或者LSMASHVideoSource读取mp4那样。ffms2能力有限不管啥东西都要index一遍是它自己的问题(DGNV读mkv/mp4也是一样)。就算是多个文件合并,只要知道每个文件的entry point list,跳到后面的文件只需要将需要的帧号计算出来就行了,同样不会产生index的需要。
我们后面不仅仅会遇到mkv,mp4这样格式的文件,我们可能还会遇到其他视频格式,比如ts,m2ts,avi,rm(vb)等等,为了保证对于文件解码的正确性,所以我们需要索引。
使用ffms2一般只有在LWLibavVideoSource失败的情况下才会试试,因为ffms2在读取ts/m2ts类的格式有时候会出问题,出现相应的帧数对应不准的情况,有时候解码的时候还会RP,尤其是在读取interlace的视频的时候。不过ffms2在做comparison的时候还是很有用的,它的FFInfo能够显示当前帧的类型和帧数。和LWLibavVideoSource一样会生成引导文件。
FFVideoSource("E:\movie\video.mkv")
Comparison
Source=Import("C:\Users\Nero\Desktop\Encode\Test\anime.avs").Subtitle("Source", y=37)
Encode=FFVideoSource("C:\Users\Nero\Desktop\Encode\Test\anime.mkv").Subtitle("Encode", y=37)
Interleave(Source, Encode)
Spline36Resize(Dither_convert_yuv_to_rgb(), ffsar&1?round(width*ffsar):width, ffsar&1?round(height/ffsar):height)
FFInfo(cfrtime=false, vfrtime=false)
这样就可以做到源和压制后的视频交织在一起,便于做Comparison,同时可以适用于那些在压制的时候指定了sar的情况。
DGDecNV(推荐)
据说是效果相当好的源滤镜,但是N卡only,而且还要收费15$,所以我这个A卡穷狗就没办法进行介绍了。会生成引导文件,使用显卡进行解码,减轻CPU的压力。还可以使用N卡的反交错模块。但是现在CPU基本都过剩,所以在参数较高的编码中,速度并不比LWLibavVideoSource快多少。读VC-1效果也不错,如果源是VC-1,可以首选。DG系列在读一些奇葩片源,比如HDTV,DVD之类的效果也不错。
密码: shd4
DGIndex(DVD, MPEG-2推荐)
DGIndex是一个比较老的源滤镜了,只能用来读取MPEG文件,在DVDRip的时候还是非常有用的。DGIndex本身会读取视频内的一些soft pull down flag等信息,在解码的时候以及后续处理的过程,比如IVTC都比较有帮助。特别是TIVTC本身就支持DGIndex的d2v文件。比如有时候拿到一个ts文件,它带有soft pull down的flag,用LWLibavVideoSource读取的时候会读到一个介于23.976~29.970之间的一个帧数,逐帧查看既有帧帧交错,又有5烂2之类的,不好处理。而如果使用DGIndex进行读取,读出来的帧率会是29.970,以便后续的处理。
DGIndex在MeGUI的tools文件夹下可以找到。
DirectShowSource(极度不推荐)
热爱生命,请远离DSS。DSS主要是播放器在播放时的源滤镜,意思就如其名,直接显示源。优点就是速度较快,且seek的时候响应较快,因为这些都是为播放的时候用户所care的东西。缺点也是明显的,seek的准确度不高,如果出现上面提到的文件格式没有index的情况下,DSS会“想方设法”地猜出seek的地址。同时依赖于系统的解码能力,如果没有事先***过完整的解码包,例如完美解码,K-lite等等,在解码一些视频的时候会花屏。如果不希望后面的过程中出现崩溃等问题,就请不要使用DSS。
DSS2(不推荐)
基于Haali的DSS。在走投无路的时候试试。
DSS2 mod(不推荐)
基于L***的DSS2。在走投无路的时候试试。
那么关于源滤镜,我们一般可以这么选择。
m2ts: LWLibavVideoSource, DGDecNV
mkv: LWLibavVideoSource, ffms2
mp4: LSMASHSource
ts: DGIndex, DGDecNV
这里额外一点就是对于MPEG-2的片源,比如一些录制的ts源或者DVD,推荐优先使用DG系列的源滤镜,比如DGIndex,DGIndexNV等等,因为这些源滤镜可以正确读取文件的一些soft pulldown的flag。我之前遇到过一个文件:
堀江由衣 - Golden Time (M-ON MPEG2-TS 1080i).ts
它就包含soft pulldown信息,mediainfo显示它的帧率是29.970,但是我用LWLibavVideoSource载入后发现帧率是25.547。后来在NMM看到mawen1250菊苣说过,LWLibavVideoSource在读这类文件时不能正确参考文件的soft pulldown信息,会得到一个介于23.976-29.970之间的一个帧率,逐帧查看会发现既有帧帧交错,又有5烂2。而如果使用DG系的源滤镜的话,就会正确显示29.970。逐帧查看是5烂2,IVTC即可。
Crop(left, top, -right, -bottom)
四个主要的参数分别表示切边的像素值,需要注意的就是后面两个值必须得是负值。如果视频格式是YUV的,切边的像素值必须是2的倍数,RGB格式的则不受此影响。
Crop(0, 140, -0, -140)
表示对视频进行上下切140像素的黑边。
resize表示改变视频的分辨率,主要有downscale和upscale两种。downscale表示从高分辨率到低分辨率,而upscale表示从低分辨率到高分辨率。由于目的不同,resize的滤镜也十分的多,有Spline,Lancos,Bilinear,Bicubic,还有用于高位深下的Dither_Resize16以及分别处理luma和chroma平面的SeparateResize等等,具体每种中又有不同的。如Spline就有Spline36Resize和Spline64Resize。不同的滤镜效果不同,没有什么所谓的最好的resize方式。只是根据你的目标以及你所处理的视频来选择你所需要的resize滤镜。一般来说,不同的滤镜resize后的效果体现在画面的锐利程度,边缘锯齿等等。一般对于downscale我们使用Spline36Resize效果较好,upscale使用Spline类的resize滤镜就会产生比较重的ringing,这时采用Lancos就会比较好。upscale的终极目标是产生高清原图,现在也有很多插值算法,这些算法都比最近邻算法要好很多。最近邻算法就是pointresize,直接拉伸,生成的图片各种锯齿,色块,马赛克。现在也有基于神经网络的nnedi3,可以参考mawen1250菊苣的nnedi3_resize16脚本,是现在效果比较好的upscale脚本了。在这之上,就是2014年CVPR的那篇waifu2x了,就是港中文的那篇论文。是一个基于超分辨率卷积神经网络的做法,预先训练一堆模型,然后通过学习的方法进行upscale。效果拔群,但是速度也慢的惊人。
Spline36Resize(1280, 720, 0, 0, -0, -0)
一般的resize滤镜后面还有4个比较常用的参数用来表示在resize的同时需要切边的像素值,即切掉多少像素值同时resize到目标分辨率。但是这个切边与Crop的切边有点不一样。Crop的切边的像素值对于YUV必须是偶数,但是这里的这个切边却允许奇数值。Crop的切边可以认为是纯粹的切边,不改变视频中点对齐的方式。而resize的切边可以认为已经改变视频中像素点的对其方式。个人一般的做法是先做Crop,如果仍然需要切边,例如切掉奇数像素的黑边,则再在resize的时候指定。比如:
Spline36Resize(1280, 720, 0, 1, -0, -1)
则表示在resize到720p的同时,切掉上下各1px的黑边。这种做法在片子周围有奇数黑边的时候比较有用。
当然另外一种做法是修复黑边,即用除黑边外的最外面的扫描线来代替黑边,这样我们就看不到黑边了。这样的滤镜或者脚本有FillMargins,AutoDirtyLineFixer等。
FillMargins(0, 1, 0, 1)
就是表示修复上下1px的黑边。这里要注意的就是FillMargins的语法与Crop或者Resize不同,4个参数都是正数。
Resize的计算,比如片源是1920×1080的分辨率,上下各132px的黑边,切除黑边后是1920×816的分辨率,那么resize到720p就是1280×(816÷1920×1280)=1280×544。
如果是上下140px的黑边,那么切掉黑边之后是1920×800的分辨率,resize到720p就是1280×(800÷1920×1280)=1280×533.333333,结果是小数。如果结果是小数则要近似到最近的偶数,那么就是1280×534。
但是这种情形与上面一种情形是显然不同的。第二种情况下,resize后的值并没有整除,我们人为做了近似,那么其实我们的resize影响了原本画面的比例。只不过是近似值较小,我们看不出来罢了。对于这种情形,我们也可以采取相应的方式进行补救,我们会在后面SAR部分提到。
至此,对于一般国内PT小组的蓝光电影压制可以说基本就已经完成80%了。一个类似的avs脚本:
LWLibavVideoSource("E:\00001.m2ts") #载入片源
Crop(0, 140, -0, -140) #切除上下各140px的黑边
Spline36Resize(1280, 534, 0, 1, 0, -1) #切除上下1px的黑边,resize到
FillMargins(1, 0, 1, 0) #修复左右各1px的黑边
Deinterlace
除了Progressive的蓝光原盘以外,你还会看到许多奇葩的格式,比如HDTV录制的视频,DVD,以及那些非1080p的蓝光原盘(多见于音乐会,纪录片等等)。这些片源很多都是不能直接压制而需要相应的处理的。因为各种各样的原因,这些片源基本都不是Progressive(逐行扫描)的,就是当你用一个源滤镜载入片源之后,你会看到“梳状”条纹,或者有的地方叫做“拉丝”。其中如果每一帧都有这样的条纹,那就是帧帧交错,需要做Deinterlace,也就是“反交错”。将它还原回Progressive的状态。
反交错的滤镜有很多,比如Tdeint,yadif,yadifmod,QTGMC等等,效果不同,处理的速度也不尽相同。
在使用滤镜之前,我们需要了解一些交错的概念。在交错中,将一帧拆成了上下两场,奇数帧保留偶数行,偶数帧保留奇数行,那么在播放的时候其实是30fps=30× 2=60场。而反交错的过程就是将2场还原成一帧完整帧的过程。交错分为2种类型,一种是TFF(Top Field First),顶场在先,另一种是BFF(Bottom Field First),底场在先。在使用yadif的时候我们就需要搞清楚片源是什么交错类型的。
判断方法是我们首先使用源滤镜载入视频,假设片子是TFF的,将上下场拆成两帧,然后再逐帧观看片子,是否有回退现象,有回退现象则说明片子与假设相反,是BFF的,而如果没有回退现象,有重复现象的话,说明片子就是TFF的。比如:
DGSource("E:\MV\[140129] TVアニメ「ニセコイ 伪恋」OPテ?マ「CLICK」/ClariS [PV1080P].dgi") #载入视频
AssumeTFF.SeparateFields() #指定TFF,拆场
这时候画面的宽度会变为原来的一般,拉丝也会消失,逐帧观看画面,观看是否有回退现象或者重复现象。在这里这段视频有回退现象,说明片子是BFF的。
一般片源质量很烂或者一般般,没必要上太好的滤镜,那就试试yadif,yadif这个滤镜速度快,但是效果也一般。yadif也用来实时播放过程中的反交错。主要的参数是mode和order。
mode = 0 : temporal and spatial interlacing check (default).
= 1 : double framerate (bob), temporal and spatial interlacing check.
= 2 : skips spatial interlacing check.
= 3 : double framerate (bob), skips spatial interlacing check.
order = -1 : field order as Avisynth assumes (default).
= 0 : Bottom field first.
= 1 : Top field first.
mode一般默认是0,单倍帧率,即反交错前后帧率不变。一般反交错的过程为了保证信息的完整性,帧率是会翻倍的。但是双倍帧率同时增加了编码过程和解码过程双方的压力,这个我想并不难理解,所以一般都是单倍帧率。
但是单倍帧率下,对于yadif这种质量较差的反交错滤镜,就有可能出现鬼影的情况。所以需要使用双倍帧率。
order通过官方文档以及我们之前的判断填写即可。
LoadCPlugin("yadif.dll") #注意是LoadCPlugin,因为yadif并不是MSVC++编写的滤镜
yadif(order=1)
一般片源不错,或者想要得到较好的反交错效果,那么你就需要考虑QTGMC了。QTGMC本身是一个反交错的脚本,里面调用了很多滤镜,反交错的kernel依据使用模式是yadif和nnedi3。QTGMC质量虽然不错,但是速度是非常的慢,而且会占用很多内存空间。
根据文档说明,载入相应需要的滤镜,然后就开始工作了。首先我们需要设置QTGMC的Preset,分为:
“Placebo” o “Very Slow” o “Slower” o “Slow” o “Medium” o “Fast” o “Faster” o “Very Fast” o “Super Fast” o “Ultra Fast” o “Draft”
一般使用QTGMC的原则是使用看不出区别的最低参数。因为基于nnedi3的反交错质量比yadif要好的多,再高的参数其实意义不大,所以为了编码效率先从Super Fast开始。低于Super Fast则会调用yadif进行反交错。QTGMC反交错是补全所有信息的,所以帧率是会翻倍的。不过基于之前说过的原因,我们设定其中的FPSDivisor参数,设定单倍帧率。但是单倍帧率砍掉了一半的有效信息,所以我们还需要设定ShuttleBlur参数,搭配FPSDivisor动态融合两帧,这样效果会更好。还有一个Border参数,如果你的视频没有黑边,将这个开启为True,这样对于边缘的处理会更好。
(Preset="Super Fast", FPSDivisor=2, ShuttleBlur=2, Border=True) #设定单倍帧率,动态融合两帧,片子没有黑边
反胶卷过带,推荐的滤镜是TIVTC。
降噪,基于不同的算法相应的滤镜也有好多。
去色带,主要的滤镜有皮神的f3kdb。
TAA,TAAmbk
Chroma Shift
x264作为现在开源最为优秀的***C/H.264编码方案,编码模式主要是npass和crf模式。与上面qaac的编码模式类似,2pass模式就是跑2遍,使得最终的平均码率与目标码率接近。crf模式则是跑一遍,给定一个码率因子,根据码率因子来进行编码。优点就是不需要跑2遍,节省时间,缺点就是最终的目标码率未知。
解压上面下载的x264压缩包,选择任意的x264版本即可。这里x264版本之间的区别在于x264是否编译了其他的模块,比如,libav、ffms2、l-smash等等。但是对于我们使用avs作为输入来讲,这些都无关紧要。其中有x86和x64的版本以及对应的8bit和10bit的版本。这里我们先选择8bit的版本。其中x64的版本比x86的快10%,所以选择x64的x264。但是我们现在由于种种原因,使用的avs是32位的。所以我们还需要一个pipe程序作为两者之间的桥梁。pipe程序有avs2yuv,avs4x26x等等。这里推荐使用avs4x26x,同样是06_taro大大写的,支持指定帧率,帧数,isp等等,比较方便,支持高位深pipe等等。
这里楼主选择的是32位的版本,不知道为什么64位的版本不能用。将其中x264_64-8bit.exe改名为x264_64.exe,接着将avs4x26x.exe,x264_64.exe放在同一个目录下,将上面的avs脚本也放在同一个目录下。需要注意的就是任何关于压制的路径最好都不要出现非英文字符,否则有可能出错。接着就是书写压制的命令脚本了。我们在该路径下新建一个txt文件,在里面输入:
"avs4x26x.exe" "x264_64.exe" --output "movie.mkv" "movie.avs" 2&log.txt
保存为.bat文件,然后运行这个bat文件,没什么问题的话,压制就会开始了。
x264参数设定
上面我们已经实现了压制,使用的是x264的默认参数。实际上,x264的默认参数的目标是中低还原程度的编码,质量比较差。所以我们需要设定一些参数。一般参数的设定根据片源,还有你的需求来设定。比如三次元真人电影和二次元动画的参数显然是不一样的。还有高质量的还原和中等质量的还原参数是不一样的。追求速度的编码参数也是不一样的等等。x264比较方便的一点就是有Preset和tune选项以供我们参考。Preset与之前QTGMC的类似,影响编码速度和编码质量。
--preset &string&
Use a preset to select encoding settings [medium]
Overridden by user settings.
- ultrafast:
--no-8x8dct --aq-mode 0 --b-adapt 0
--bframes 0 --no-cabac --no-deblock
--no-mbtree --me dia --no-mixed-refs
--partitions none --rc-lookahead 0 --ref 1
--scenecut 0 --subme 0 --trellis 0
--no-weightb --weightp 0
- superfast:
--no-mbtree --me dia --no-mixed-refs
--partitions i8x8,i4x4 --rc-lookahead 0
--ref 1 --subme 1 --trellis 0 --weightp 1
- veryfast:
--no-mixed-refs --rc-lookahead 10
--ref 1 --subme 2 --trellis 0 --weightp 1
--no-mixed-refs --rc-lookahead 20
--ref 2 --subme 4 --weightp 1
--rc-lookahead 30 --ref 2 --subme 6
--weightp 1
Default settings apply.
--b-adapt 2 --direct auto --me umh
--rc-lookahead 50 --ref 5 --subme 8
--b-adapt 2 --direct auto --me umh
--partitions all --rc-lookahead 60
--ref 8 --subme 9 --trellis 2
- veryslow:
--b-adapt 2 --bframes 8 --direct auto
--me umh --merange 24 --partitions all
--ref 16 --subme 10 --trellis 2
--rc-lookahead 60
- placebo:
--bframes 16 --b-adapt 2 --direct auto
--slow-firstpass --no-fast-pskip
--me tesa --merange 24 --partitions all
--rc-lookahead 60 --ref 16 --subme 11
--trellis 2
默认是medium,是中等,如果追求一定的质量的话,那么就需要选择slower,或者veryslow了。
不过一般我们还可以在默认的参数上再加以修改,力图得到较为合理的参数。可以看到x264有很多的参数,然而我们需要更改的参数并不多。而编码的过程是速度/质量权衡的过程,所以也并非参数越高越好。我们需要做的是在我们可以接受的范围内提高我们的编码效率。
一般设定预设为slower,或者veryslow,placebo设定则如其意思,速度过慢而而质量提升很不明显所以不是很推荐。
这里x264的参数往往并没有一套万能的参数,对于不同的片源,不同的要求,不同的avs处理,参数都会有所区别。但是相比于avs对于源的影响,x264的参数对于源的影响要小的多。所以在x264高度成熟的今天,哪怕参数设置奇葩,码率给够一般也不会有什么太大差别。这里我给出我个人一般使用的压制参数。我个人要求不高,也不会在观看时贴到屏幕上帧帧观看,播放设备是一个渣笔记本和一个渣手机。要求是中等偏上的还原程度,对体积有一定的要求。
三次元真人电影
较高的还原度:
首先指定preset slower和tune film,这样很多的针对电影的参数就设定了,如果嫌不够慢可以上preset veryslow。crf数值一般取16-17之间就可以了,这样的还原度就可以了。
二次元动画:
本文已收录于以下专栏:
相关文章推荐
基于HEVC(H.265)的的应用级别的编码器发展的速度很快。所说的应用级别,就是指速度比较快的,有实际应用价值的编码器。目前可以直接使用的有两个:x265,DivX265。
VapourSynth作为一个开源的非线性视频处理frame server,相比于已经停滞开发的AviSynth,有着全新的处理架构,同时使用Python作为脚本书写语言,处理上更为科学。很早之前就在...
记得第一次接触编程,学习的就是在C语言控制台输出“Hello World!”。到后来的C#,java,Android都是如此,现在开始学习IOS,当然还是先从它开始吧!
打开Xcode,单击...
观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是GUI系统、订阅----发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI...
关注公众号
在公众号里回复“”秘密“”两个字
http://task.csdn.net/m/task/home?task_id=398 领取奖励
提示:根据公众号里的自动回复,完成...
LinearLayout xmlns:android=&/apk/res/android&
xmlns:app=&http://schema...
JavaEE 6及以上版本的web.xml问题?MyEclipse JavaEE 6版本开始web.xml突然消失不见?没这回事,只是不太必须而已,有需要的项目可以自行进行添加或在创建项目的时候点击n...
maven依赖:
redis.clients
增加spring 配置
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)