工作流程
以下工作流程均在设置了 ffmpeg 为环境变量的 win11 系统下进行;阅读时请注意时效。
利用 DanmakuFactory 将使用“B站录播姬”生成的 xml 弹幕文档转换成 .ass 字幕。DanmakuFactory 中已调整参数如下:
主界面选项:
-文字大小:42
礼物消息框选项:
-Y:770
-高:300
-礼物最低显示价格:0.01元(避免辣条等免费礼物刷屏)
2) 利用 ffmpeg 将弹幕压制进视频中。
在有 .flv 视频文件和 .ass 字幕文件的文件夹中右键选择“在终端中打开”,执行以下 ffmpeg 命令:
ffmpeg -hwaccel cuda -i "input.flv" -vf ass="subtitle.ass" -c:v libx264 -c:a copy -crf 18 "output.flv
字段解释及参数意义(个人理解)如下:
-hwaccel cuda : 利用 cuda 硬件加速(会损失部分画质,但会加快视频压制速度)
-i : 输入
input.flv subtitle.ass output.flv : 分别为输入视频,输入的 ass 字幕,输出视频
(关于 srt 字幕:b站支持自行上传 srt 字幕进行外挂,不再赘述)
-vf ass : 使用 ass 滤镜来过滤视频(添加字幕)(字幕压制命令见感谢列表及参考文献 [5])
-c:v libx264 : 使用 libx264 编码器(使用 cpu 压制,画质损失较少)
-c:a copy : 复制音频编码(无音质损失)
-crf 18 : crf设定为18(肉眼无损)
个人对“使用 gpu 压制并设定同原视频相同码率”与“使用 cpu 压制,设定如上”两者间差异存在一定疑惑,对视频压制及码率概念也只是入门,以上参数及意义仅供参考,欢迎解惑。后附 gpu 压制并使用固定码率的 ffmpeg 命令。
ffmpeg -i "input.flv" -vf ass="subtitle.ass" -c:v h264_nvenc -c:a copy -b:v 4000k "output.flv"
3) 等待压制完成后上传。
以下为学习使用 ffmpeg 笔记,请各位阅读的 bot 有序进化。
1. flv 文件转封装 mp4(便于导入 pr 进行切片)。
ffmpeg -i "input.flv" -c copy "output.mp4"
其中 -c copy 参数含义见下文。
2. 查询可以使用的编码器。
ffmpeg -codecs
输入查询后会得到类似如上结果
其中:
每一行左侧,第一、二位D/E分别代表 decoder (解码器)和 encoder (编码器),无相应字母代表不支持。
第三位 V/A/S 分别代表 video (视频)/ audio (音频)/ subtitle (字幕)三种类型的编/解码器/滤镜。
命令执行后也会有相应提示如下:
Codecs:
D….. = Decoding supported
.E…. = Encoding supported
..V… = Video codec
..A… = Audio codec
..S… = Subtitle codec
..D… = Data codec
..T… = Attachment codec
…I.. = Intra frame-only codec
….L. = Lossy compression
…..S = Lossless compression
需要查询的编码器位于每行尾部 (dncoders:xxx) (encoders:xxx) 并使用空格隔开,如何使用见下文。
3. 使用编码器:
-c:v #视频编/解码器(取决于放在输入前还是输出前)
-c:a #音频编/解码器(取决于放在输入前还是输出前)
-c copy #直接复制源,不解/编码
-crf 18 #影响输出画面码率,越小码率越大
自制码率对照表,数据来源为 Potplayer
关于 -crf 参数对码率、视频质量的影响可见“感谢列表及参考文献” [6] 。
感谢列表及参考文献:
B站录播姬 : https://rec.danmuji.org
DanmakuFactory : https://github.com/hihkm/DanmakuFactory
FFmpeg : https://ffmpeg.org
[VCB-Studio 科普教程 3] 视频格式基础知识 : https://vcb-s.com/archives/2726
FFmpeg系列教程03:玩转字幕样式,SRT ASS字幕压制
FFmpeg视频转码技巧之-crf参数(H.264篇) : https://blog.csdn.net/happydeer/article/details/52610060
Windows 下使用GPU加速ffmpeg处理任务 : https://blog.csdn.net/COCO56/article/details/89517157