录播教程:怎样制作弹幕版录播?(2.图片弹幕篇)
看更多录播相关内容,请点击:那个啥和那个啥的录播组教程- 文集
制作图片弹幕版录播的操作过于繁琐,看看就好。

要用到的软件
录播姬(录制视频和弹幕文件)
DanmakuFactory(转换弹幕文件)
Aegisub(预览和修改带图弹幕)
WPS高级版/MS Word(批量替换特定弹幕为图形弹幕)
消极压制(NegativeEncoder,快速压制图形弹幕)
操作前的条件:
给Aegisub加上VSFilterMod.dll(压制前预览效果)
试验消极压制(NegativeEncoder)压制效果
安装WPS高级版或MS Word,确定能启用宏功能(有能力的自己写代码更好)

给Aegisub加上VSFilterMod.dll(压制前预览效果)
除去特殊设置的播放器,大部分播放器不能正确显示插入图片字幕的视频。如下图MPC-BE播放器中,彩色方框即为未能正常显示的图片

而在简单配置后的Aegisub中即可正常显示,效果是这样的:

为了防止整个过程盲人摸象,只能在压制完成后才能看到图片是否正确压制的现象发生。我们通过简单配置Aegisub作为预览播放器。
具体步骤如下:
1.下载VSFilterMod.dll 链接:https://www.aliyundrive.com/s/YXwSN681cGF
2.将VSFilterMod.dll拷贝到Aegisub目录,如:C:\Program Files (x86)\Aegisub\csri\VSFilterMod.dll
3.打开Aegisub,点击“查看-选项”

3.在偏好设置左侧,“高级-视频”,修改“字幕来自”为“CSRI/vsfiltermod_textsub”,点击最下方“应用”


试验消极压制(NegativeEncoder)压制效果

消极压制调用硬件加速编码(例如NVENC),与小丸工具箱的AVS相比,牺牲画质大幅提升压制速度,适用于录播组压制弹幕的应用场景。但在上手操作时请务必务必先用时间短的视频压制实验一下。笔者受制于硬件条件,只能使用QSVEncC进行压制,遇到的一部分问题是这样的,有些问题在其他电脑上无法复现,仅供参考:
设置VBR 5000,但视频码率远低于5000
原因:AVC编码下VBR模式无效。解决方法:AVC编码下,设置为LA 5000
压制带图片弹幕,弹幕文字为乱码
原因:QSVEncC未正确识别弹幕文件。解决方法:修改弹幕文件开头,详细请看后面内容

安装WPS高级版或MS Word,确定能启用宏功能
免费版的WPS没有VBA功能,使用本文附带的VBA请务必使用WPS高级版或MS Word。
不想使用这两款程序,但可以用其他替代品请看下面的原理自行实现功能。
(我只会写if-else-if-else的蠢代码,如果能有人优化(重写)一下非常感谢)
用word或者其他软件打开弹幕ass文件,要替换的弹幕长这样:
Dialogue: 0,0:07:00.82,0:07:12.82,R2L,,0,0,0,,{\move(1970,51,-50,51)\q2\fs50}{\c&HD8EE54}2333
两个时间表示弹幕开始时间和结束时间,{}内move表示弹幕从哪移动到哪,字号fs多大,{\c&HD8EE54}表示颜色,只有2333才是内容
替换完之后的弹幕长这个样子:
Dialogue: 0,0:07:00.82,0:07:12.82,R2L,,0,0,0,,{\move(1970,51,-50,51)\q2\fs50}{\c&HD8EE54}{\p1\an8\bord0\shad0\1img(D:\Desktop\弹幕表情\统一尺寸\2333.png)}m 0 0 l 240 0 l 240 60 l 0 60
其他不变,也就是说,把内容只有2333
选择出来(不是无脑替换,要是有弹幕写“你可以用自己手机看2333”也替换掉就不对了)换成{\p1\an8\bord0\shad0\1img(D:\Desktop\弹幕表情\统一尺寸\2333.png)}m 0 0 l 240 0 l 240 60 l 0 60
就可以了
我用的方法是用}作为开头检测,word里的换行作为结束检测,替换掉,比如2333换成图片是这样的:

查找}2333^p
,替换为}{\p1\an8\bord0\shad0\1img(D:\Desktop\弹幕表情\统一尺寸\2333.png)}m 0 0 l 240 0 l 240 60 l 0 60^p
。
注:现阶段直播间表情包只属于滚动弹幕,没有固定弹幕,本文所用的替换法将固定弹幕和滚动弹幕全部替换,实际有只选择滚动弹幕的方法,但本文不讨论这种情况。
知道了原理,各位懂程序可以自己写。不懂程序的用本文附带的vba,笔者实验WPS2019和MS Office Word均可使用。
在完成上面三项准备后,正式进入实际操作。

操作步骤
注:初次设置请遵照0-1-2-3-4-5的顺序做,完成初次设置后每次进行1-2-4-5的步骤(修理弹幕文件-替换字幕开头-批量替换图片-压制)
0.下载B站新版直播间表情包图片并统一调整大小
B站新版直播间表情包不断更新中,本文不提供表情包的下载,请读者自行下载。下载方式非常简单,打开chrome系浏览器暂停所有影响的浏览器扩展(或者直接用隐私模式不启用扩展),打开审查元素,发送一个新版表情包查找图片网址自行查找命名规律。或者firefox以排障模式启动,审查元素查找图片网址。
需要注意的是B站的直播间表情包和主播专属表情包尺寸不一样,几乎所有B站的直播间表情尺寸都不一样。为了方便起见,需要统一尺寸。我下载的后缀为@56h的图片,然后使用PS把所有图片画布尺寸改为240*60像素的PNG图片(这也就是vba中240和60的来源,用PS不是放大或缩小图片,是增加图片边缘的透明像素数量,建议用PS的批处理功能)
1.修理弹幕文件
直播姬的xml文件,用DanmakuFactory转换为ass字幕文件,注意分辨率并记下。此时遇到第一个绊脚石,Aegisub打不开这个字幕文件。

PlanA:用Sublime Text打开发现有大量的unknown语句(没有Sublime Text不要急,慢慢看)

使用Sublime Text的正则表达式功能进行替换,替换Comment: NO.*:unknow type
为空

替换完成后效果如下图,保存后可以正常打开。

正常打开

PlanB:没有Sublime Text或者不会正则表达式的,这么做:设置打开方式为记事本,Ctrl+A全选文本,复制,粘贴到Excel中


选中该列,启用“筛选”功能,筛选内容为“comment”

选中第一个comment,用Ctrl+Shift+方向下 组合键,选中所有的comment,右键-删除-整行,关闭筛选功能。

Ctrl+A全选表格内所有内容,复制到记事本内保存,这样也可以打开。
2.替换字幕开头
尽管此时可以用Aegisub正常打开弹幕文件查看,但替换为图片之后仍有可能出现压制弹幕为乱码,究其原因,QSVEncC对弹幕格式要求严格。
用记事本或Sublime Text打开弹幕文件,这是会出错的弹幕开头
这是不会出错的弹幕开头
推测从零开始在Aegisub创建的ass文件没有问题,DanmakuFactory1.62_Release_GUI输出的弹幕都是前面的开头,替换掉并保存。
3.设置宏
前文自提取的表情包放置到自定义路径,记下该路径。在修改好的vba文件(见文末范例)“查找-替换”文件路径。
WPS用户打开“开发工具-VB宏”,输入新名称,点击"创建",用记事本修改过的VBA替换掉图中的内容。


Word用户“视图-宏-查看宏”新建名称,创建,如上图所示用记事本内容替换


然后把文档“另存为”,文件类型为“带宏的模板文件”。(WPS会自动选择保存的位置)

在“开发工具”中选择“加载项”,点击“添加”,点击之前我们保存过的“宏”,然后点击“确定”

只要设置这一次,以后可以跳过第三步。
4.批量替换图片
当我们再次打开WPS时,在“视图”选项中使用“宏”时,之前保存的宏没有了。不要紧,再次打开“开发工具”中“加载项”,在编辑好的宏的前面方框内点下,然后确定。

以文本方式打开弹幕文件ass,全选文本,复制粘贴到Word/WPS内,运行刚才新建的宏。

运行完成后,全选Word/WPS内的文本,复制粘贴覆盖弹幕ass文件

现在用Aegisub打开弹幕文件,点击“视频-使用空白视频”,设置正确的分辨率(DanmakuFactory输出的分辨率)可以看到图片显示,没有显示的请看看图片路径是否正确。

能看到这张图,就成功大半,下面进入压制环节。

5.压制
本文以QSVEncC为例,N卡用户应自行参考修改
在准备环节,笔者已经列举出问题的情况,笔者目前使用的参数如图:

选好参数后,切换到VS选项卡,点击“VS代码生成器”,勾选”使用VSFilterMod“,勾选“调整大小”(每次都必须这样,必须调整分辨率为DanmakuFactory输出的分辨率,后面有讲怎样提高或降低分辨率的方法)

把待压制视频放到”输入“,前文写好的弹幕文件拖入”字幕“,有需要的自行修改”输出“
下面的提升帧率非必须设置,但可以提高弹幕版视频的观看体验。
直播时弹幕实时渲染,很少有卡顿的感觉。如果直播推流为30帧或者更低,会明显感觉弹幕移动卡顿。怎么解决?
import sys
后面敲回车增加一行import havsfunc as haf
,然后在video = core.resize.Bicubic(video, format=YUV420P8)
后面敲回车增加一行video= haf.ChangeFPS(video, 60)
这样就得到丝滑的60帧弹幕体验(视频帧率用其他方法提升,本文不讨论)有的主播推流720P,想提升弹幕分辨率(视频分辨率用其他方法提升,本文不讨论)。需要两步,第一步以记事本方式打开弹幕文件,修改PlayResX和PlayResY为目标分辨率,本例为1920*1080。第二步在消极压制中勾上调整大小,会多出一行
video = core.resize.Lanczos(video, 1920, 1080)
1080P分辨率弹幕、2K分辨率弹幕、4K分辨率弹幕随意设置。没有修改PlayResX和PlayResY直接压制会出错,小于设定分辨率会裁切,大于设定分辨率会重复,下面三张图PlayResX:1920,PlayResY:1080,没有以记事本方式更改出现的错误如下



回到常规设置,经过千辛万苦之后,我们终于可以点击压制,在软件右侧会增加一个任务项,右键查看压制详情。

首次运行会建立索引,注意在之前的设置里我设置的输出格式为mkv。mkv的好处是在视频输出的同时就可以打开视频查看效果,MP4没有这样的好处。
视频中使用是4K120帧李安导演的《双子杀手》,笔者中止压制,重新修改参数,再点“开始压制”,没有反应。这是软件特点,解决方法是把输入端的视频再次拖到输入框,这样点“开始压制”就能继续压制,注意VS代码消极压制不会保存,需要的参数要自行保存到其他软件。
检查发现拖入的ass文件没有替换文件开头,出现乱码。修改之后,点击电影_neenc_tempVideo.mkv就能实时看见压制效果,没有声音是正常现象。

(拉伸比较厉害,最好在压制同时开视频看看效果,像上图这样就重新设置吧)
很多主播是在晚上直播,能不能设置在睡觉的时候压制,压制完成自动关机?
可以,消极压制支持命令行操作,如果像我一样不会用,也可以查看实时mkv没有问题后,点击“中止”,到视频输出目录下,找到“输出视频_neenc_batTemp.bat”,记事本方式打开,在末尾补充一行“shutdown -s ”,即为压制完成后自动关机。

附录
VSFilterMod.dll
阿里云盘下载链接:https://www.aliyundrive.com/s/YXwSN681cGF
百度网盘链接:https://pan.baidu.com/s/1_4W1ctKgch1N09AnAKoMGA 提取码:qc14
批量查找替换图片弹幕(vba)

Sub 批量查找替换图片弹幕()
Const wdReplaceAll = 2
Const wdFindStop = 0
Dim oRng As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
With oRng.Find
'查找替换开头
'批量查找替换“弹幕”为“图片”
sResult = .Execute(FindText:="}??^p", replacewith:="}{\p1\an8\bord0\shad0\1img(D:\Desktop\弹幕表情\统一尺寸\??.png)}m 0 0 l 240 0 l 240 60 l 0 60^p", Replace:=wdReplaceAll)
sResult = .Execute(FindText:="}???^p", replacewith:="}{\p1\an8\bord0\shad0\1img(D:\Desktop\弹幕表情\统一尺寸\???.png)}m 0 0 l 240 0 l 240 60 l 0 60^p", Replace:=wdReplaceAll)
'基于上面两个例子自行复制粘贴
'……
End With
End Sub

下一篇专栏拟定讲解:怎样把断成多节的录播视频合并为一个视频,附带讲解合并破碎的直播弹幕文件。

更多录播相关内容,请点击:那个啥和那个啥的录播组教程- 文集