梯子不是太稳定,YouTube 时上的去时上不去,索性在能上的时候把想看的视频都下下来,传到国内的一些视频站作为备份。但多数视频站不支持 CC 软字幕(不是很想传 B 站,因为经常撞车),故需要把字幕(哪怕是 YouTube 自动生成的英文字幕)做成硬字幕内嵌到视频中。
将字幕转换成 ASS 格式
不用 SRT 格式字幕的原因很简单,懒得在 ffmpeg 参数里指定大小尺寸字体之类的参数了。
我用的是 Arctime 不带 Pro 的免费版。
参数简要列举如下:
- 字体
- Noto Sans SC
- 60 pt
- 背景
- 勾选「矩形边框」
- 字幕位置
- 垂直边距:100
使用 FFmpeg 压制
CPU 编码
最简单的方式是使用 CPU 编码器:
1 | ffmpeg -i video.mp4 -vf ass=video.ass output.mp4 |
A 卡硬件加速(AMF)
鉴于我是 A 卡(HD 7850 2G),可以用 AMF 硬件编码器,这样就可以并行开多个编码任务然后电脑也不会太卡:
1 | ffmpeg -i video.mp4 -vf ass=video.ass -c:v h264_amf output.mp4 |
哦对,顺带一提,在更新最新版本的 Pr(Premiere Pro v14.4.0 & Media Encoder 14.4)之后,A 卡也可以在渲染时使用硬件加速了。实测 HD 7850 最高支持 1080P(宽 ≤ 1920,高 ≤ 1080)H.264 的硬件加速。实际效果上,渲染速度提升还是可以感知到的,渲染 25 分钟左右的视频(仅剪辑和加 BGM)之前需要差不多半个小时,现在只需要 20 分钟不到了(CPU 是 E5 2660,8C16T)。但渲染过程中 CPU 总占用从 100% 跌至 30% 左右,电脑的正常使用不再受影响,当然 GPU 就全程保持 Video Encode 满载了。
N 卡硬件加速(NVENC & NVDEC)
当然 N 卡有更好用的 NVENC 和 NVDEC 硬件编解码器,命令建议参考 NVIDIA 官方博客,我这里随便列一各,也不知道能不能用(亮机卡 GTS 250 并没有这俩编解码器):
1 | ffmpeg -vsync 0 -hwaccel cuvid -i video.mp4 -vf ass=video.ass -c:v h264_nvenc -y output.mp4 |
参考
- NVIDIA FFmpeg 转码指南
- CUDA GPU Accelerated h264/h265/HEVC Video Encoding with ffmpeg
- NVIDIA Video Codec SDK
- 这里可以看到硬件支持列表