============================分割线================================== 码率高低直接决定了画质高低,本文的参数设置教程意在教大家优化码流,最大限度的利用1800k有限的码率,减少不必要的码率占用。 同样分辨率下,帧数越高,同样的编码设置下,维持原有画面质量的码率就越大;同样帧数,同样编码设置下,分辨率越高,理论上画质会降低(比如1000k时720p画质肯定比1080p好) 帧数,分辨率,画质越高,码率越高,调整这些参数的目的就是最大限度的优化码流,在同样的码率下达到更好的画质~ 本教程,往后使用的参数语法均为名称(空格) 数值或字符 如crf值为23.5就这样写--crf 23.5 一定要带空格,两个不同类型的参数之间也要! 个人目前在用的参数,自己的视频是60fps的,仅供参考
认识H.264参数-带你改善压制效果 码率控制模式(最关键的一个参数)
--crf 视频目标质量 0为绝对无损 18以下肉眼基本看不出损失 一般压制时(起码对于b站的1800k来说)绝大多数细节什么不那么凶残的视频23.5-28的质量不仔细看确实是看不出什么损失的,30以上画面糊的很厉害,,压制时除非特吃码率的视频,否则尽量不要超过30
-bitrate(平均码率)和--qp(固定量化) --bitrate 传b站最简单的是--bitrate 1700 --level 41 --preset 8 (参数意思文章后段有标注) --preset 预设参数 懒得设置其他参数可以就加这两个值,推荐8(very slow) 数字与对应的预设类型 1 ultra fast 2 very fast 3 faster 4 fast 5 normal 6 slow 7 slower 8 very slow (推荐) 9 placebo (最慢,但质量只有微量提高) --bframes (-b)B帧 此参数可以调整两个P帧之间B帧放置的最大数量,以此有效提高压缩率,B帧不包含完整的画面,仅保留一些两帧之间有差别的地方,它需要依靠相领多个帧将这个画面还原,最大数值为16,追求速度和压缩率的用6,机子好一些用8-12,片子吃码率要尽可能压缩的直接16。 个人推荐6-12 压缩率不错且速度不是太慢 -b-adapt 编码器 插入B帧进行决定的算法 1为快速 2为最佳 要速度用1,质量也可以;要画质和压缩率用2。 片子不吃码率,1就可以,2在B帧给到8以上时拖速度很厉害。 --ref (-r) 参考帧数 涉及到还原一个B帧最多读取相领多少个帧的画面,同样可以提高压缩率,最大16 推荐将数值和你设定的B帧数量保持一致或者不要差太多 --level 编码级别 推荐41,即编码等级为high 4.1级,投稿b站建议最多为4.1级 不推荐50(5.0)及以上,手机配置较低时可能卡会住 30 意为3.0级 31. 意为3.1级 32 意为3.2级 40 意为4.0级 41 意为4.1级 B站投稿的极限值 42 意为4.2级 这个级别往上手机看就容易卡了,尤其是1080p分辨率在较老的低端手机上放 50 意为5.0级 51 意为5.1级 52 意为5.2级 再大没5.2级往上就少见了,30(3.0级)以下有但不推荐了,也没必要那么低了 --profile 编码档次 有 baseline (基础) main(主线) high(高) 默认 high 也是质量最好的 main 和 baseline不推荐 --keyint(-I)最大关键帧间隔与--min-keyint(-i)最小关键帧间隔 关键帧(I帧)是唯一包含了完整画面的一种帧,但体积比P帧 B帧都有大,所以最少,你看电影拉进度条拉不准总是跳到某一个相领的画面上就是因为关键帧,这个参数后面跟的数值是间隔的帧数, --keyint 就写 视频帧数的9.5倍 --min-keyint就直接写视频帧数的2倍即可,这几个数值都要整数,B站二压要求间隔最多10秒,所以把你的帧数 乘9.5,然后取整数就是你要设置的最大关键帧间隔,最小关键帧和你的帧数保持一致即可。 --scenecut 此参数同样涉及关键帧,因视频经常会切换场景,这时候相领两帧毫无相似度和参考性可言,这个参数专门防止这种情况下缺少关键帧导致画面瞬间全是色块或者马赛克,后面跟的数值是两帧之间相似度小于这个百分比时编码器可以无视--keyint(-I)与--min-keyint(-i)这两个参数直接加一个关键帧,默认40,追求质量用60 追求压缩率可以考虑35 30个人推荐35-60 --subme 子像素优化 提升质量增加压缩率用,最大11 推荐10和9,设置11会拖速度 --me 动态向量预测算法
--merange 运动搜索半径 umh或更优的算法可以16以上,推荐16-32,自己喜欢用24-28 --aq-strength 推荐0.8-1.3,数值太低或太高容易把画面压烂,但实测这么做可以少量压低视频的码率,这个参数涉及到码率在画面上不同区域的分配的量的差别 --aq-mode 可选为1 2 3,推荐2 ,1效果尚可,不容易压糊但会吃点码率,如果你怕把视频压糊,可以考虑使用1。2会把一些画面压糊但节省码率,更适合B站的低码率。 --qcomp 这个决定码率曲线(分配)如何,推荐0.5-0.8,默认0.6,最大为1,数值越大码率浮动越厉害,这个值给的太低,码率浮动不够灵活,码率分配会不太合理伤及画质,太高有些画面也可能会糊掉 --rc-lookahead 这个参数推荐设置为你视频帧数的3-4倍,最大250,默认40,推荐与--qcomp 0.5 0.6搭配 --trelli trellis量化指令是否开启,要压缩率用2,大概可以降100-200k,要速度直接不写 --no-fast-pskip 这个会拖慢压制速度,但可以提高画面质量 --filter(-f) 涉及去块(除马赛克)格式为 数值:数值 第一个数值为去块范围,第二个为去块强度,上调这个比值会让画面略微的变模糊并少量降低码率,你可以想象为线条或画面物体的边缘变得没那么锐利了,极限为-6:-6到6:6 建议范围是-2:-2到4:4 --psy-rd 涉及画面细节 格式和上面的--filter一样,第一个值为亮场细节,第二个值为暗场细节,大致的原理是,让画面部分区域微量的失真,来防止那些区域被压糊,此设定在crf模式中上调会增加视频的码率但在码率充足的情况下可以提升画质,这个数值要想找到最佳的设定需要反复试验,比对,画面动态很厉害的视频,此参数第一个值建议设置为0-0.3,第二个数值填0,相对静态的第一个值可以设置为1以下,第二个值设置在0.3-0 --vf resize:改变分辨率 格式为 --vf resize:横向分辨率,纵向分辨率,,,,滤镜名称 滤镜名称推荐写spline,质量最佳 其他的1080p压不下来可以用1600*900 1440*810分辨率 I、B、P帧与GOP的大致概念 GOP(group of pictures) 图像组 之前讲到的I帧 B帧 P帧一个图像组理论上是这样的 I B B B B P B B B B P B B B B P B B B B I 在没有出现scenecut参数额外加关键帧时一个gop包含两个I帧(就是两个I帧之间的那些),gop长度的范围是在你设定的--keyint(-I)--min-keyint(-i)决定的 B帧 P帧都不是完整的画面,都需要读取相领的B帧 P帧 I帧来还原完整的画面,B帧包含的信息最少,它是需要双向读取相领帧的,P帧要多一些,它是读取之前的B帧 I帧还原画面的,I帧可以当成一张JPEG图像,完整画面,供B帧 P帧参考以还原完整画面。 具体解码和读取顺序如下图 目前较为先进的h265的编码原理和h264类似,只是h265在宏块划分上做了优化,更加智能,宏块简单讲就是把一帧分成好几小块,总之h265的压缩率较h264翻了一倍,编码和解码也相对费劲了些 分享几组自己写的参数 (并不是适合所有视频 仅供参考~) 小丸的2pass和crf模式默认都是这套
总之设置编码参数更多的是自己反复尝试,还是要根据自己的视频来设置~ (画面极其激烈的视频crf B帧都要比较大,画面不那么激烈的反之) 写制H.264编码器参数的思路(仅适用于B站) 本教程可能尚存在一些不足,欢迎各位在评论区里讨论! |
|