使用 Python 在视频上渲染文本
创始人
2025-07-05 19:41:56
0

在本文中,我们将学习如何使用 python 在视频中渲染响应式文本,我们将使用 opencv 这个包,这是一个非常全面的计算机视觉处理库,会给我们的视频图像处理带来极大的便利。现在,让我们通过 pip 来进行安装。

pip install opencv-python

在我们需要使用 opencv 的时候,就可以像下面这样来引用。

import cv2

现在让我们进入下一步,选择一个视频并导入到程序中。

第一步 —— 导入视频

这将是一个简单的步骤。我们将做两件事: 导入一个视频和找到视频的帧速率。我们将使用帧速率来计算视频中的秒数,这样我们就可以计算不同文本的渲染时间。

我们使用 VideoCapture 方法导入视频。

tree_video = cv2.VideoCapture('tree.mov')

现在我们来计算导入视频的帧速率。

fps = tree_video.get(cv2.CAP_PROP_FPS)
print(fps)
#result
23.97

23.97!这意味着视频基本上每秒运行24帧,所以24次循环相当于1秒的视频。

第二步 —— 读取文本文档

在这一步中,我们将从文本文档中读取文本。我们将使用 open 函数,它是 Python 附带的一个内置函数。下面是我将要导入的文本文档的屏幕截图。

确保每个句子都在新的一行上。在读取文本文档时,我们将把每一行转换为一个列表项。

poem = open('under_the_giant_tree.txt')
poem_lines = list(poem)
print(poem_lines)

图片

第三步 —— 响应式文字功能

在这一步中,我们将编写一个用于更新文本的函数。我决定根据不同的时间戳更新文本,但是可以随意更改为不同的情况。

frame_ = 0
def text_update(frame_):
 if frames_ < (5*fps):
  text = str(poem_lines[2])
 elif frames_ < (10*fps):
  text = str(poem_lines[4])
 elif frames_ < (15*fps):
  text = str(poem_lines[6])
 elif frames_ < (20*fps):
  text = str(poem_lines[8])
 else:
  text = "no text found"
 return text

使用 if-else 来确定正在播放的视频的时间戳。

定义一个名为“frame_”的新变量来传入视频帧。这样可以以秒为单位计算持续时间。我们已经知道从第一步开始的每秒帧数,即24帧每秒。在这个函数中,文本将每五秒更新一次。我将诗的行分配给 text 变量。

现在,让我们进入最后一步。

最后一步 —— 渲染视频

太好了!我们快完成了。在最后一步,我们将把迄今为止所做的一切结合起来。我们将使用 while 循环来触发程序。我们可以使用“ escape”或“ q”键结束循环。

while(True):
ret, frame = tree_video.read()
font = cv2.FONT_HERSHEY_SIMPLEX
on_video_text = text_update(frame_)
   
  cv2.putText(frame, on_video_text, (50, 50), font, 1, (0, 255, 255),
    2, cv2.LINE_4)
frame_ = frame_ + 1
cv2.imshow('poem on video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
    break
tree_video.release()
cv2.destroyAllWindows()

那么上面的代码中发生了什么:

  • 我们首先从读取视频开始的。
  • 然后定义我们想要用于文本的字体。
  • 然后使用 text_update 来更新文本。
  • 使用 putText 方法添加视频响应文本。
  • 使用 imshow 方法显示视频。

下面是我运行程序后的截图:

总结

恭喜!我们已经学习了如何使用 Python 在视频上呈现可更新的响应文本。我希望你喜欢这个实际操作的计算机视觉项目。参与实际的编程项目是提高编程技能的最好方法。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...