天天动画片 > 八卦谈 > 录播教程:怎样制作弹幕版录播?(2.图片弹幕篇)

录播教程:怎样制作弹幕版录播?(2.图片弹幕篇)

八卦谈 佚名 2022-12-09 02:06:30

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

制作图片弹幕版录播的操作过于繁琐,看看就好。

  • 操作前的条件:

    • 给Aegisub加上VSFilterMod.dll(压制前预览效果)

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

    • 安装WPS高级版或MS Word,确定能启用宏功能

  • 操作步骤

    • 0.下载B站新版直播间表情包图片并统一调整大小

    • 1.修理弹幕文件

    • 2.替换字幕开头

    • 3.设置宏

    • 4.批量替换图片

    • 5.压制

  • 附录

    • VSFilterMod.dll

    • 批量查找替换图片弹幕(vba)

要用到的软件

  • 录播姬(录制视频和弹幕文件)

  • 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,拷贝好的文件路径为C:\Program Files (x86)\Aegisub\csri\VSFilterMod.dll

3.打开Aegisub,点击“查看-选项”

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

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

消极压制调用硬件加速编码(例如NVENC),与小丸工具箱的AVS相比,牺牲画质大幅提升压制速度,适用于录播组压制弹幕的应用场景。但在上手操作时请务必务必先用时间短的视频压制实验一下。笔者受制于硬件条件,只能使用QSVEncC进行压制,遇到的一部分问题是这样的,有些问题在其他电脑上无法复现,仅供参考:

  1. 设置VBR 5000,但视频码率远低于5000

    原因:AVC编码下VBR模式无效。解决方法:AVC编码下,设置为LA 5000

  2. 压制带图片弹幕,弹幕文字为乱码

    原因: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

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

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

本文标题:录播教程:怎样制作弹幕版录播?(2.图片弹幕篇) - 八卦谈
本文地址:www.ttdhp.com/article/12007.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们