首页 › 论坛 › 置顶 › 如何使用Python创建内容感知动画字幕
-
作者帖子
-
2025-07-03 09:44 #24837Q QPY课程团队管理员
标准字幕是功能性的,但如果它们能够更智能呢?如果它们能够在说话时自动突出关键信息,使您的内容更具吸引力且更易于理解呢?
在本教程中,我们将编写一个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演示,看看您能构建出什么。
-
作者帖子
- 哎呀,回复话题必需登录。