个人歌切流程
有人在私信问起,但是聊天界面略显局促,因此写到专栏里。当然主要还是记录一下,把我自己的笔记搬一部分过来。
我的工作流是极度非典型的,如果你使用 Windows 系统和 Pr,并且已经习惯 Pr 等大型视频剪辑软件的导出速度,以下所有内容都可以不用看。
专栏无法插入外链,因此所有提到的工具链接都放在文章末尾。

流程简述
歌切主要分这几个步骤:
直播录制
切片
精确切割
(可选)修复
重采样(针对b站的Hi-Res无损功能进行音频处理,避免音质被降级)
上传投稿

直播录制
有多种录制工具可选择。我个人使用的是 blrec。录播姬的使用方式类似,但 blrec 多一个实时查看音频码率的功能。

录制的要点是:
最好是有台电脑24小时挂机录制。如果开播后才开始录制,容易录到b站二压过的流。(以前这个问题比较严重,因为二压流的音频码率一度只有128Kbps,对于音乐类作品来说难以接受;不过最近b站将二压的音频码率提高到了接近原始音质水平)区分是否二压住要看上图中“格式画质”处的信息,如果显示「原画(10000)」则是主播推的原始流;如果显示「原画(10000, bluray)」则是被二压过。一旦被二压则无法再次获取到原始流。
界面上显示的是最近一段时间的平均码率。主播长时间不说话时,显示的音频码率会逐渐下降。对于510直播间来说,唱歌时的码率一般在260~310Kbps。
如果追求快速切片,当感兴趣的内容结束后即可以进行分段。点击上图中的✂️图标进行分段。分段后找到对应的文件,可进行下一步处理。
关键的录制设置参考:



切片
录制软件会定时在流中插入关键帧。
根据我个人的理解,视频主要分为三种帧类型:I帧、B帧和P帧。我们所说的关键帧指的是I帧,它是完整的一帧图像;P帧仅纪录了它与前面的帧之间的变化,它需要依赖它前面的至少一个I帧和之间的N个P帧,才能解码成一帧完整的图像;B帧与P帧类似,但它也同时使用它与后面的帧的差异来进行进一步压缩。
写了这么多,其实主要为了说明一个情况:在关键帧处进行切割是最经济的——速度最快,可以直接复制文件内容,不需要重编码。如果从非关键帧处进行切割,则需要从切割点的前一个I帧处逐帧解码,得到切割点处的完整图像,并设置为一个新的I帧,否则视频开头会显示为黑屏。

以上图为例。整个长条表示原始的录像视频,每个竖线表示一个关键帧。
如果从B处开始切割,以C为结尾,软件不需要进行重编码,仅需要复制从B到C处的数据即可。
如果从D处开始切割,在理想情况下,软件可以这样操作:从A开始读取,逐帧解码得到D处的完整图像,并将D-B之间的所有帧都重新编码;接下来复制B-C之间的数据,将两段数据合并起来即可。但通常这种操作会导致B处(两段数据合并处)音频出现跳变。这是因为一般视频的帧率远小于音频的采样率,而D-B的结尾处音频会被略过至少一帧的数据(如果视频是60FPS,音频采样率44100Hz的话,也就是缺少 1/60 * 44100 = 735 个音频数据点)。
因此,要得到D-C的方法一般是:从A-C逐帧进行解码后重编码,并同步处理音频数据,最后在D处重建一个关键帧,丢弃A-D之间的数据。但这样操作的成本比起前一种操作来说大大增加了。试想如果A-C有1小时长,而D-C仅有3分钟,那么大部分资源都将消耗在我们根本不需要的前57分钟里(这也是早期我投稿的几个歌切发布比较晚的原因,大部分时间都在对视频进行重编码)。
如果我们可以将A-D的时间尽可能缩短,就可以减少最终需要重编码的无效时长,减少等待时间,提高硬件使用效率。因此,当歌曲开头并不在关键帧上时,需要在开头保留多一个关键帧间隔。(以上图来理解,就是歌曲实际在E处开始,B-E中间有多余内容,此时我们需要从B处切起,得到B-C的视频文件后,再进行精确切割得到E-C)
切片使用 LosslessCut。LLC是跨平台软件,可进行简单的视频切割、合并、轨道抽取等操作。方便查看关键帧位置、音频波形,并能显示 blrec 在录制卡顿时插入的章节信息。

切片操作本身没什么可说的,左下角打开音频波形显示(A),定位到歌曲头部的关键帧(B+C),按b键即可切割。在侧边栏的列表中选中分段(E),按回车键打开标记对话框,可输入歌名(如下图)。

删除不需要的分段后,点击「导出」即可将选中的分段导出成单独的视频。导出时关闭「智能切割」(智能切割就是前面说的会导致音频跳变的方案),仅使用关键帧切割。

如果这一步切割的视频开头关键帧后面有多余内容,我一般会在分段名上打上nt标记(need trim),后续会进行精确切割。
导出后结果如图。llc文件是 LLC 用于纪录分段切割点的项目文件,可以不用理会。


(可选)精确切割
如果切割后的视频,开头没有多余部分(如下图),则不需要进行精确切割。

将上一步导出的视频文件再次拖入 LLC 中,在歌曲真正开始处切割,并删除头部多余的部分,仅保留歌曲本体,如下图。

接下来我使用自己开发的小工具,将这个视频对应的llc文件拖入精确切割工具栏,等待完成即可。


这个小工具仅我个人使用,没有测试过其他环境。工具背后实际操作 ffmpeg 来进行重编码。可以直接使用 ffmpeg 命令来完成,具体命令是:
ffprobe -hide_banner "待修剪的视频文件路径"
分别得到音频轨道和视频轨道的平均码率和编码器,如图。

ffmpeg -hide_banner -v warning -y -i "待修剪的视频文件路径" -ss "4.216" -to "4:40:800" -vcodec "视频轨道的编码" -acodec "音频轨道编码" -b:v "视频码率,例如5006k" -b:a "音频码率,例如324k" "输出文件的路径"
其中 -ss 选项后跟歌曲的起始时间,-to 选项后跟结束时间。如果是直到视频结尾,-to 选项可以省略。

使用命令时注意:不要将输出文件和输入文件设置为同一个位置。
处理后得到最终的视频文件,如图所示。


(可选)修复
音频的简单修复可以使用任意一个 DAW 软件来操作,以下截图使用 Davinci Resolve。
在合适的位置切断视频,放大音频波形,移动后面的音频片段,使得与断点前面的音频片段波形重合。

逐级放大调整,直到可以看到单个音频数据点。确定音频对齐并试听无误后,将视频轨道做相应调整即可导出。


重采样
b站对于音频压缩太厉害,为了维持原始音质,在投稿时需要勾选“Hi-Res无损”选项。此选项对稿件的音频格式有一定要求,如图。

直播流录制下来是达不到这个要求的,因此使用 ffmpeg 对音频进行重采样,强制提升到这个规格。此操作不会提升音质,只是为了避免b站压缩音质。使用到的命令是:
ffmpeg -hide_banner -v warning -y -i "输入文件的路径" -vcodec copy -acodec flac -strict -2 -sample_fmt "s32" -ar "48000" "输出文件的路径"
这个命令会将音频轨道重采样并输出为 48KHz、位深度 24bit 的 flac 格式,与原始视频轨道合并为新的视频文件。

上传投稿
上传就不用说了,记得勾选“Hi-Res无损”选项。分P稿件可以使用第三方客户端上传(例如 biliup-app),或者使用官方投稿工具投两个空的分P占位,然后到网页端去上传新分P后删除占位视频。

文中提到的工具
blrec: https://github.com/acgnhiki/blrec
录播姬: https://rec.danmuji.org
LosslessCut: https://github.com/mifi/lossless-cut
ffmpeg: https://ffmpeg.org
Davinci Resolve: https://www.blackmagicdesign.com/
biliup-app: https://github.com/biliup/biliup-app