前言
最近在看雪糕麻麻的直播,沉迷在围棋教学中一声声宝宝中。
雪糕麻麻这么可爱,我肯定要狠狠的切片,想切片首先得有录播,其他人传的录播可能会存在几个问题令我不是很满意:
- 没有弹幕
- 有弹幕但是没有 sc
- 有 sc 但是显示效果不佳
- 快速切带有弹幕的片段
录播大致分为几种:
- 没有弹幕的,这种最为简单,随便找个录播软件都能处理。
- 有弹幕的,采用直接录屏,这种录出来的视频质量不会非常好,而且不容易进行自动化。
- 将弹幕和视频流分别进行处理,之后再将弹幕硬编码到视频中。
调研完就要根据需求寻找对应的工具了。
- 录屏工具,支持保存视频流和弹幕流
- 支持将 b 站 xml 弹幕流文件转换为通用 ass 文件的工具
在里面加点私货- 硬编码工具
接下来就是各个流程以及工具的介绍了,不关注雪糕麻麻就不准你看下去了!!!
录屏工具
谷歌搜索 b 站录播 第一个选项
b 站录播工具我推荐 B 站录播姬 ,我试用下来完美符合我的第一个要求,还有 GUI 版本,舒服。
如果你想录制 sc,记得在设置里把相关的设置打开。
转换工具
转换工具我推荐使用 DanmakuFactory 支持转换 sc,以及支持 cli 调用,方便打造进一步的工作流。
这里我给出我的转换脚本,只要将弹幕文件拖动到 bat 文件即可进行自动转换。
将下载获取的cli
文件重命名为DanmakuFactory.exe
并加入环境变量。
这里我修改了弹幕的字体大小以及透明度,将以下代码保存成 bat
文件:
1 | @echo off |
私货时间
说叫私货时间其实也没有那么私货,只是 DanmakuFactory 转换 sc 后生成的 ass 文件我不满意,出现后只有等其余 sc 将其顶出屏幕,期间会遮掉很大一部分屏幕,我写了一个脚本支持修改 sc 弹幕的持续时间,使其减少对内容的影响。如果这个issue 做完可能就不需要我的脚本了
之后准备增加一些功能:
- 自动嵌入某条弹幕,比如大屏红字
雪糕麻麻是我的 - 增加 sc 的出现消失的过渡效果
我们再修改一下自动化脚本,你需要下载对应平台的 cli 工具,并加到环境变量中
1 | REM 将原始xml文件转换为ass |
压制工具
万物视频压制大多基于ffmpeg,我们也是用这个工具来实现视频字幕的硬编码,一行就可以解决了
我们来一个一个参数解析一下这个命令我也是初学者ffmpeg -i example.flv -vf "subtitles=example.ass" -c:v libx264 -c:a copy example.mp4
- 首先
-i example.flv
参数代表输入文件名称是example.flv
,-i
是指input
- 其次
-vf subtitles=example.ass
参数代表对视频进行处理,这里指得是加上了字幕文件 - 然后
-c:v libx264
是指定编码器使用libx264
,这个编码器会使用 cpu 进行编码 -c:a copy
是指音频流从原始文件中进行复制,不进行额外处理- 最后是输出文件的名称
最后我们再来优化一下之前的脚本:
1 | @echo off |
现在我们的脚本已经可以做到将一个录播视频拖动到 bat 文件中,自动转换出 ass 文件以及压制后的视频文件。
增强
单纯使用 cpu 来进行重编码,效率会比较低下,以及影响到正常的录播功能,接下来我们尝试使用intel
的核显来进行编码,效率会略有上升。
首先你的核显需要支持qsv
功能,查看此页面进行检查
之后需要安装最新版的驱动,可以在 intel 的官网中搜索你的型号获取安装。
之后将ffmpeg
这行代码修改为ffmpeg -i %BASENAME%.flv -vf "subtitles=%BASENAME%.ass" -c:v h264_qsv -c:a copy %BASENAME%.mp4 -y -hwaccel qsv
。
如果你有老黄的显卡,也可以使用 cuda 来进行加速,下次再折腾吧。
性能
cpu 编码
核显编码
快速切带有弹幕的片段
先说一下什么叫做快速切带有弹幕的片段:
如果你采用视频流和弹幕分别保存的流程下,正常你想切某个带有弹幕的视频。
你可能需要先将弹幕硬编码到视频中再进行剪辑,或者剪切完后移动弹幕轴,或者在可以渲染 ass 字幕的播放器中进行录制。
以上的几种方式有显得稍微有些繁琐,大大打击切片的积极性。
我的方法没有那么繁琐的流程,只需要 3 步,而且只会在最后进行一次编码。
首先需要下载找个lossless-cut工具,之后所有的粗剪,以及切片相关的工作我都会使用这个工具来完成
先说一下完成这个事情的思路:
- 将转换后的 ass 和 mp4 文件封装成 mkv 格式
- 利用 lossless-cut 来进行剪辑
- 将剪辑后的 mkv 文件拆成 mp4 以及 ass 文件,再进行硬编码
第一步
将正在录制的文件复制到一个新的文件夹再做接下来的处理,以防录制出现问题,别问我怎么知道的
将转换后的 ass 和 mp4 文件封装成 mkv 格式。
这一步很简单,直接用 ffmpeg 进行处理就行,这里给出我的处理脚本:
1 | REM 将视频和ass字幕装到mkv容器中 |
第二步
利用 lossless-cut 来进行剪辑。
安装完毕软件后,只要将视频拖动至软件图片上,即可打开进行处理。
需要在设置中关闭关键帧剪辑。
第三步
将剪辑后导出的 mkv 进行硬编码,这里我也给出我的处理脚本:
1 | REM 将带有字幕的mkv文件进行硬编码 |
做字幕
自动上传
待施工