关于将ass特效字幕制作成透明背景视频后导入PR的记事
关于将ass特效字幕制作成透明背景视频后导入PR的记事
一、 Mov格式
直接用subtitle.ass生成mov
文件,Quicktime格式,透明,速度快(x9.78),只是体积略大
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v png -t "00:00:59.900" -r 60 -b:v 10M subtitle.mov -stats |
Lavf61.3.104
编码,元数据 Lavc61.8.100 png
编码
采用 -r 60 -b:v 10M
时,提示:
1 | [vf#0:0 @ 0000025dad18b600] More than 1000 frames duplicated bitrate=13030.9kbits/s dup=920 drop=0 speed=8.18x |
意味着帧率设定高了,输入视频的帧率低于60FPS,导致帧重复。指定高帧率时,FFmpeg
会重复帧来匹配输出帧率。
比特率 (-b:v 10M):提示 bitrate=14770.7kbits/s
说明实际编码比特率高于指定的10Mbps,可能是因为输出格式需要更高的比特率来保持质量。
所以,一般情况下,可以不指定这两个参数让它自适应:
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v png -t "00:00:59.900" subtitle.mov -stats |
命令重要参数解读:
-
-f lavfi
:使用libavfilter虚拟设备作为输入。 -
-i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
:创建一个透明背景的虚拟视频流,并叠加字幕。
- `color=color=black@0.0:size=1920x1080,format=rgba`:生成一个1920x1080分辨率的透明背景(黑色@0.0表示完全透明)。
- `subtitles=subtitle.ass:alpha=1`:叠加ASS字幕文件`subtitle.ass`。
- `-c:v png`:使用PNG编码器,将视频编码为PNG格式帧(保留透明度)。每一帧都是一个PNG图像文件,生成透明背景视频,使用RGBA格式保留透明度。
- `-t "00:00:059.900"`:设置输出视频的持续时间为59秒900毫秒。
- `subtitle.mov`:输出文件名。
**输出**:生成一个带有透明背景和字幕的MOV文件,使用PNG编码(无损压缩),文件体积大。
## 二、 WebM格式
Premiere Pro 支持 WebM 格式(通过插件),但遗憾的是,对于这种格式的透明背景(也即 alpha 通道)的支持并不理想。虽然 WebM 可以包含透明信息,但 Premiere Pro 可能无法正确识别和处理这种透明度。
实测过包括` GoPro Cineform 编码的 QuickTime (.mov)`文件在内的多种编码方式,都折在了透明背景识别这里。
有[网友在帖子](https://blog.csdn.net/xindoo/article/details/134096967)中试过将数字人的绿色背景抠掉,变成透明背景的方法,但是用Ai-China用同样的`ffmpeg`命令没有成功,背景去不掉。(后来在AE中抠掉,但是字幕锯齿严重,有待进一步研究)
使用 FFmpeg 命令检查视频的像素格式:
```powershell
ffprobe -v error -select_streams v:0 -show_entries stream=pix_fmt -of default=noprint_wrappers=1:nokey=1 output.webm
如果输出是 yuva420p
,则说明视频包含 alpha 通道。而即使包含 alpha 透明通道,PR对于WebM的支持仍然不好,往往在导入PR后发现还是不透明。尽管 WebM 支持 alpha 通道,但 Premiere 可能无法正确解释 WebM 文件中的 alpha 通道。这是一个已知的兼容性问题。尝试不同的输出格式: 对于 Premiere,使用 MOV 容器和 ProRes 4444 编码通常是处理带 alpha 通道视频的最佳选择。
因为.mov
文件相对较大,所以Ai-China还曾考虑使用 GoPro Cineform 编码的 QuickTime (.mov) 。这种格式提供了较好的压缩率,同时保持了透明度,并且据称与 Premiere Pro 兼容性很好。但实测下来,也可能是操作不当,还是无法实现导入PR透明背景。
1 | ffmpeg -i green_video.mp4 -filter_complex "[0:v]colorkey=0x299530:0.1:0.1[ckout]" -map "[ckout]" -map 0:a -c:v libvpx-vp9 -b:v 2M -c:a libvorbis output.webm |
这又是一个实测没能通过的命令。因为此博主的目的是抠掉数字人背后的绿幕背景,与Ai-China的带字幕透明背景视频略有不同。大家可以一试。
其中最关键的参数 -filter_complex "[0:v]colorkey=0x299530:0.1:0.1[ckout]" -map "[ckout]"
其中0x299530 是随便使用的绿幕的RGB值, 具体可以根据你绿幕的RGB值进行调整。 colorkey
后面的0.1:0.1
为色度相似度(比如可以从 0.1 增加到 0.3),你可以进一步调整这些值。也可以使用 chromakey 滤镜: 尝试使用 chromakey 滤镜替代 colorkey。
三、 使用After Effects抠像制作透明背景
要在After Effects中将带有ASS字幕文件的视频的背景抠掉,制作成透明背景的视频,可以按照以下步骤操作:
步骤一:导入素材
- 打开After Effects,创建一个新项目。
- 导入你的带有颜色背景字幕的视频文件。
步骤二:使用Keying工具抠掉背景
- 将视频拖到时间轴上,创建一个新合成。
- 选择视频层,然后在“效果和预设”面板中搜索“Keylight”。
- 将“Keylight (1.2)”效果应用到视频层。
- 在效果控制面板中,使用吸管工具 (screen color) 点击视频中的颜色背景区域。这将会抠掉颜色背景,留下字幕和透明背景。
步骤三:导出带透明背景的视频
- 选择合成窗口,然后点击“文件” > “导出” > “添加到渲染队列”。
- 在渲染队列中,点击“输出模块”的“无损”选项,选择“QuickTime”格式。
- 确保在格式选项中选择“动画”编解码器,并勾选“Alpha通道”以保持透明背景。
- 设置输出路径,然后点击“渲染”。
这样你就可以得到一个带有透明背景的字幕视频文件了。这个视频文件可以在Premiere等其他视频编辑软件中叠加在其他视频之上。
解释关键步骤
- Keylight效果:Keylight是一个强大的抠像工具,可以帮助你轻松移除单色背景。
- Alpha通道:在导出设置中选择支持
RGB+Alpha
通道的编解码器,确保视频的透明部分能够正确保留。
你可以根据需要调整Keylight效果的参数,以获得更好的抠像效果。
四、 GPU加速生成
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v png -t "00:00:59.900" subtitle.mov -stats |
这个命令实际上是用CPU生成视频,速度很快,大概正常视频长度的10倍速左右(Ai-China使用的是i5 13代CPU)。但这个CPU占用是很大的,如果想用GPU生成,可以考虑如下命令:
尝试使用NVIDIA或Intel的硬件加速来提高处理速度。以下是一些建议:
- 使用NVIDIA GPU加速:
对于NVIDIA GPU,我们可以使用NVENC
编码器。但是,NVENC
不直接支持PNG编码。我们可以使用H.264
或HEVC
编码,然后再转换为带alpha通道的格式。例如:
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v hevc_nvenc -pix_fmt yuva420p -t "00:00:59.900" subtitle_temp.mp4 |
- 使用Intel QuickSync(集成显卡)加速:
对于Intel集成显卡,我们可以使用QuickSync。同样,我们需要先编码为支持的格式,然后再转换:
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v h264_qsv -pix_fmt yuva420p -t "00:00:59.900" subtitle_temp.mp4 |
- 同时使用NVIDIA和Intel硬件加速:
不幸的是,FFmpeg不能同时使用两种不同的硬件加速。但是,我们可以在处理过程中分别使用它们:
1 | ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v hevc_nvenc -pix_fmt yuva420p -t "00:00:59.900" subtitle_temp.mp4 |
这里,第一个命令使用NVIDIA GPU编码,第二个命令使用Intel QuickSync解码。
注意事项:
- 这些命令可能需要根据您的具体硬件和FFmpeg版本进行调整。
- 使用硬件加速可能会略微降低视频质量,特别是在处理alpha通道时。
- 确保您的FFmpeg版本支持这些硬件加速选项。
但是,又要说但是了!
据Ai-China实测,第四大项GPU加速中的所有命令,尽管也是在生成PR支持最好的、带透明通道的.mov
文件,也的确调用了GPU在生成,但是:导入PR后还是背景不透明!
所以,按Ai-China的初心意图,只有最开始的那条命令ffmpeg -y -f lavfi -i "color=color=black@0.0:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v png -t "00:00:59.900" subtitle.mov -stats
是符合要求的,众位自测。