如何使用Python创建内容感知动画字幕

标准字幕是功能性的,但如果它们能够更智能呢?如果它们能够在说话时自动突出关键信息,使您的内容更具吸引力且更易于理解呢?

在本教程中,我们将编写一个Python脚本来实现这一点。我们将以一个简单的烹饪视频为例,创建自动化的字幕,具体功能包括:

  • 逐字动画。
  • 用一种颜色突出特定的成分
  • 用另一种颜色强调关键动作(如“混合”或“烘焙”)。

这就是我所称的“内容感知”字幕。我们将使用Pycaps

以下是我们将创建的内容的预览:

完整示例:上下文感知动画和样式

让我们开始吧。

项目设置

首先,确保你已经安装了 pycaps。安装说明请查看 项目的README

接下来,创建一个项目文件夹,并添加两个空文件:

  1. render.py(我们的Python脚本)
  2. 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标签定义规则:

  1. ingredient: 我们将使用一些AI来识别烹饪成分。
  2. 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步:上下文动画

让我们添加最后一层润色。我们将为所有的 ingredientkey-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演示,看看您能构建出什么。

更多