在几个月前,B站放宽了视频码率和帧率要求,并将其与大会员挂钩,但是作为UP主肯定还是要去照顾那些没有买大会员的观众,这篇文章将会教你如何方便的压制不二压视频。
基于“小丸工具箱”,可以做到傻瓜式实现,但是要求对命令行相关知识有一点点了解,不要求压制程序的相关知识。
Head Pic: 苍之彼方的四重奏-有板真白
应该是gal的cg,所以没有原图链接
B站压制非大会员 1080P 60FPS(已GG)
https://www.bilibili.com/read/cv949156
准备
首先你需要一个小丸工具箱
已经写好的傻瓜式批处理脚本
这个 Windows 批处理脚本的适用压制情况:
编码器:x264_64-8bit.exe
音频模式:复制音频流
压制:2Pass
、保持原分辨率
、保持原帧率
对.mp4
进行压制,输出格式依然是.mp4
将以下代码复制下来粘贴到记事本中,修改前面的设置,然后保存成.bat
批处理文件,然后将你要压制的视频(仅支持单个文件)直接拖到批处理文件即可自动压制
@echo off
::设置小丸工具箱目录,不要加末尾的斜杠,不要加双引号
SET MarukoToolbox=F:\Program Files\MarukoToolbox
::设置输出目录,不要加末尾的斜杠,不要加双引号
SET OutputDir=F:\output
::视频比特率(Kbps)
SET BitRate=2900
::压制线程数
SET Threads=8
::后续部分不需要动
SET fullpath=%1
SET filename=%~n1
::提取音频(复制音频流)
"%MarukoToolbox%\tools\ffmpeg.exe" -i %fullpath% -vn -sn -c:a copy -y -map 0:a:0 "%MarukoToolbox%\temp\%filename%_atemp.aac"
::VBR 第一次压制
"%MarukoToolbox%\tools\x264_64-8bit.exe" --pass 1 --bitrate %BitRate% --stats "%MarukoToolbox%\temp\%filename%_vtemp.stats" --threads %Threads% --preset 8 -I 600 -r 4 -b 3 --me umh -i 1 --scenecut 60 -f 1:1 --qcomp 0.5 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8 --level 4.1 --level-force -o NUL %fullpath%
::VBR 第二次压制
"%MarukoToolbox%\tools\x264_64-8bit.exe" --pass 2 --bitrate %BitRate% --stats "%MarukoToolbox%\temp\%filename%_vtemp.stats" --threads %Threads% --preset 8 -I 600 -r 4 -b 3 --me umh -i 1 --scenecut 60 -f 1:1 --qcomp 0.5 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8 --level 4.1 --level-force -o "%MarukoToolbox%\temp\%filename%_vtemp.mp4" %fullpath%
::合并视频与音频
"%MarukoToolbox%\tools\mp4box.exe" -add "%MarukoToolbox%\temp\%filename%_vtemp.mp4::trackID=1:name=" -add "%MarukoToolbox%\temp\%filename%_atemp.aac::trackID=1:name=" -new "%OutputDir%\%filename%_x264.mp4"
::清理临时文件
del "%MarukoToolbox%\temp\%filename%_atemp.aac"
del "%MarukoToolbox%\temp\%filename%_vtemp.stats"
del "%MarukoToolbox%\temp\%filename%_vtemp.stats.mbtree"
del "%MarukoToolbox%\temp\%filename%_vtemp.mp4"
pause
原理解释
其实这个压制命令完全是基于小丸工具箱的预置压制参数,只是在基础上加了--level 4.1 --level-force
参数
清晰度 | 要求大会员 | 视频码率 | 音频码率 | 隐性要求 |
---|---|---|---|---|
720P | <=2000K | <=192K | level<=4.1 | |
1080P | <=3000K | <=192K | level<=4.1 | |
1080P+ | √ | <=6000K | <=320K | |
720P60 | √ | <=3000K | <=320K | |
1080P60 | √ | <=6000K | <=320K |
还有其他条件例如色彩空间、声道之类的要求此处省略
以上条件仅仅依据官方给出的信息 + 本人实际经验 + 本人猜测,实际上肯定有漏洞,我见过8K30FPS
的B站视频,level在6.0
,码率20000K
,清晰度在1080P
档,而且UP主说甚至可以弄到最高144FPS
,我不太了解这个是怎么做到的
至于144FPS
据我所知在1080P60FPS
档是可以的,不会被二压
回归正题,根据我多年的实验,不被二压的关键在于level<=4.1
(想了解 level 参数你可以看这里)
因为 1080P60FPS 的level=4.2
,超过了二压线,因此会被二压,因此我们要做的仅仅只是让B站“认为”我们上传的视频的 level 只有4.1
就好了,而且视频码率控制在3000K
内,就不会被二压
在视频压制时加上--level 4.1 --level-force
参数,可以让程序强制把 level 信息写成4.1
,由于这个值并不是每次都通过后期计算得出的,而是视频文件信息中写死的,因此B站的视频转码机制并“不知道”我们偷改了这个信息
万用方法
如果你压制参数与我的傻瓜式批处理脚本不同,你也可以制作适合你自己用的批处理脚本
步骤:
- 使用小丸工具箱按照你需要的参数配置好,并进行一次压制(注意码率在
3000K
以内) - 压制完成后不要关闭日志窗口,而是点击左下角的“导出日志”,导出成文件
- 查看日志文件,找到小丸工具箱调用过的命令,将它们按顺序复制出来
- 向视频压制相关命令中加入
--level 4.1 --level-force
参数
不过可能并不是所有编码器都有这个参数,具体我并不了解,你可以自行在命令行中查看编码器的帮助信息 - 仿造懒人脚本中
SET fullpath=%1 SET filename=%~n1
的相关使用,将你得到的命令写成一个
.bat
批处理,这样就能方便的对单个视频文件进行处理了 - 如果你了解 Windows 的 bat 批处理,你也可以自行改造成能应对多个文件或者目录的批处理(加点判断和for循环的事情,不过因为我自己没有需求所以不会给出示例)
版权声明:本文为原创文章,版权归 神代綺凜 所有。
本文链接:https://moe.best/tutorial/bilibili-1080p60fps.html
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
x264_32-8bit.exe
1、720P保证帧数超过30,可以24fps封装进50/60fps,实际目视效果为24,信息显示为50/60,码率不用在意,比如720p60 1500K上去之后720p60路是原档,720p30路是原码率输出的30fps版本
我个人实测720p60 H5.2 1500K就是这样,level没掉4.0,表示没有二压
2、视频最窄边超过720px,比如1366*768,就会被归入1080p档位享受非会员3000/会员6000的码率,3000K以下时保证帧数大于30,3000k以上时随意
非会员上传60fps没问题的,但自己看不了
说白了就是将文件路径作为第一个参数传入
最后一段合并那里通过查看日志发现有几个代码有改动
::合并视频与音频
"%MarukoToolbox%\tools\mp4box.exe" -add "%MarukoToolbox%\temp\%filename%_vtemp.mp4#trackID=1:name=" -add "%MarukoToolbox%\temp\%filename%_atemp.aac#trackID=1:name=" -new "%OutputDir%\%filename%_x264.mp4"
有报错的朋友可以试一下
中文部分是注释,放进去没有影响
好希望可以跟博主学学技术.
最后一行没提示貌似只是因为表情配置文件里没写而已(
先放一些感觉有可能是原因的语句吧?
E:\Working place\MarukoToolbox\temp\E3 ORI_atemp.aac: No such file or directory
以及...
x264 [warning]: MB rate (489110) > level limit (245760)
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
x264 [error]: ratecontrol_init: can't open stats file
x264 [error]: x264_encoder_open failed
x264 [info]: ended at Mon Jun 11 07:02:13 2018
x264 [info]: encoding duration 424631:02:13
x264 [error]: could not open output file `E:\Working place\MarukoToolbox\temp\E3 ORI_vtemp.mp4'
[Importer] Unknown input file type for "E:\Working place\MarukoToolbox\temp\E3 ORI_vtemp.mp4"
Error importing E:\Working place\MarukoToolbox\temp\E3 ORI_vtemp.mp4#trackID=1:name=: Requested URL is not valid or cannot be found
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
系统找不到指定的文件。
不知道为什么会这样...
(不好意思现在才回复……可能是当时看到一长串的评论就漏了
这种压制是怎么实现的呢?另外,如何使用代码投稿
又或者我看过有一篇文章讲可以用WinHex之类的编辑器去手动更改压制出来的视频的MediaInfo来进行欺骗,不知道是否可行,但是这些视频(包括你给出的这个)的视频详细信息中确实可以看到是4K120fps而且码率超过6k,我也觉得很奇怪
代码投稿指的是什么?