标准字幕是功能性的,但如果它们能够更智能呢?如果它们能够在说话时自动突出关键信息,使您的内容更具吸引力且更易于理解呢?
在本教程中,我们将编写一个Python脚本来实现这一点。我们将以一个简单的烹饪视频为例,创建自动化的字幕,具体功能包括:
- 逐字动画。
- 用一种颜色突出特定的成分。
- 用另一种颜色强调关键动作(如“混合”或“烘焙”)。
这就是我所称的“内容感知”字幕。我们将使用Pycaps
以下是我们将创建的内容的预览:
让我们开始吧。
项目设置
首先,确保你已经安装了 pycaps
。安装说明请查看 项目的README。
接下来,创建一个项目文件夹,并添加两个空文件:
render.py
(我们的Python脚本)styles.css
(我们的样式表)
你还需要一个视频文件。我将使用一个名为 cooking_video.mp4
的文件。
第一步:带自定义样式的基本字幕
让我们先在屏幕上显示一些样式化的字幕。我们将编写脚本来转录视频,并应用我们的自定义CSS,以实现干净、专业的外观。
在 styles.css
中,我们来定义基础样式。我们将使用一种友好且粗体的字体,并实现一种“卡拉OK”效果,即当前单词会被高亮显示。
/* styles.css */
.word {
/* 所有单词的默认样式 */
font-family: cursive, sans-serif;
font-weight: 700;
font-size: 18px;
color: white;
padding: 2px 3px;
text-shadow:
1px 1px 0px black, -1px 1px 0px black,
1px -1px 0px black, -1px -1px 0px black,
2px 2px 3px rgba(0, 0, 0, 0.7);
}
.word-being-narrated {
/* 当前正在说的单词 */
color: #ffc107;
/* 一种温暖的黄色 */
}
现在,在 render.py
中,我们将编写代码来使用这些样式。
# render.py
from pycaps import *
# 初始化管道构建器
builder = CapsPipelineBuilder()
builder.with_input_video("cooking_video.mp4")
builder.add_css("styles.css")
builder.add_segment_splitter(LimitByCharsSplitter(min_limit=10, max_limit=15))
# 构建并运行管道
pipeline = builder.build()
pipeline.run()
print("已添加样式化字幕!")
运行这个脚本(python render.py
)。你将得到一个新的视频文件,里面有完美时机和样式的字幕。这是我们的基础。你将得到类似这样的内容:
步骤 2:使用自定义标签的内容感知高亮
这就是有趣的地方。我们希望根据单词的含义来进行样式设置。为此,我们将使用pycaps
标签系统来自动标记单词。
让我们为两个自定义AI标签定义规则:
ingredient
: 我们将使用一些AI来识别烹饪成分。key-action
: 然后识别重要的烹饪动词。
这需要设置API密钥,详情请参见文档。
我们将使用SemanticTagger
在我们的脚本中管理这些规则。
# render.py (更新为使用SemanticTagger)
from pycaps import *
# 1. 创建一个标记器来保存我们的自定义规则
tagger = SemanticTagger()
# 2. 规则1:使用AI标记烹饪成分。
tagger.add_ai_rule(
tag=Tag("ingredient"),
instructions="烹饪成分(例如:面粉、糖、鸡蛋)"
)
# 3. 规则 2:使用 AI 标记重要的烹饪动作。
tagger.add_ai_rule(
tag=Tag("key-action"),
instructions="重要的烹饪动词或技巧(例如:混合、烘焙)"
)
# 初始化管道构建器
builder = CapsPipelineBuilder()
builder.with_input_video("cooking_video.mp4")
builder.add_css("styles.css")
builder.add_segment_splitter(LimitByCharsSplitter(min_limit=10, max_limit=15))
# 4. 将我们的自定义标记器添加到管道中
builder.with_semantic_tagger(tagger)
# 构建并运行管道
pipeline = builder.build()
pipeline.run()
print("已添加样式化字幕!")
styles.css
中为它们赋予独特的样式。/* styles.css(自定义标签的附加样式) */
/* ...(保持之前的 .word 样式)... */
/* 为标记为 'ingredient' 的单词设置样式 */
.word.ingredient {
color: #4ade80; /* 一种清新的绿色 */
}
/* 为标记为 'key-action' 的词语设置样式 */
.word.key-action {
color: #60a5fa; /* 一种漂亮的蓝色 */
font-weight: 800; /* 特别粗体 */
}
查看结果:
第3步:上下文动画
让我们添加最后一层润色。我们将为所有的 ingredient
和 key-action
词添加一个放大动画。
# render.py(最终版本)
from pycaps import *
tagger = SemanticTagger()
tagger.add_ai_rule(
tag=Tag("ingredient"),
instructions="烹饪原料(例如:面粉、糖、鸡蛋)"
)
tagger.add_ai_rule(
tag=Tag("key-action"),
instructions="重要的烹饪动词或技巧(例如:混合、烘焙)"
)
# 初始化管道构建器
builder = CapsPipelineBuilder()
builder.with_input_video("cooking_video.mp4")
builder.add_css(“styles.css“)
builder.add_segment_splitter(LimitByCharsSplitter(min_limit=10, max_limit=15))
builder.with_semantic_tagger(tagger)
# — 添加动画 —
# 为每个标签为 ‘key-action’ 或 ‘ingredient’ 的单词添加 ‘zoom’ 动画
builder.add_animation(
animation=ZoomInPrimitive(duration=0.3, init_scale=0.7, overshoot=OvershootConfig()),
当=事件类型.ON_NARRATION_STARTS,
什么=元素类型.单词,
标签条件=标签条件工厂.解析("关键动作或成分")
)
# 构建并运行管道
管道 = 构建器.构建()
管道.运行()
打印("最终动画视频已准备好!")
这就是我们所得到的。一个完全自动化的脚本,能够生成美观、动态且内容感知的字幕。
超越脚本:模板和命令行接口
虽然这个脚本功能强大,但对于重复任务,你可能希望重用这种样式。这就是模板派上用场的地方。你可以将你的styles.css
和所有的管道逻辑(包括标记规则和动画)打包成一个可重用的pycaps.template.json
文件。有关所有选项,请参见JSON配置参考。
一旦你有了模板,你可以通过终端用一行命令处理新视频:
pycaps render --input episode2.mp4 --template my-cooking-style
最后的话
我们已经看到,结合Python脚本、CSS和智能标签引擎可以自动生成高质量的动画字幕。这种方法使您能够为视频内容创建独特的外观。
该项目完全开源。我邀请您在GitHub上进行探索,如果您想在不编写代码的情况下进行实验,可以尝试在线Web UI演示,看看您能构建出什么。