Python字幕滚动:为视频添加专业级动态效果!
Python实现由下向上滚动字幕
在数字媒体和编程领域,动态文本效果总能吸引观众的注意力。其中,滚动字幕是一种常见的视觉效果,经常用于视频、演示文稿和网页中。在Python中,我们可以通过多种方式来实现滚动字幕效果,比如使用pygame
库。今天,我们就来探讨如何使用Python和pygame
库来创建一个由下向上滚动的字幕效果。
环境准备
环境是python3.10.10,win11开发。
在开始之前,确保你已经安装了Python环境。此外,我们还需要安装pygame
库,可以通过以下命令进行安装:
pip install pygame
基础概念
pygame
是一个开源的Python库,用于开发视频游戏。它提供了制作游戏所需的基本功能,包括图形显示、声音播放和事件处理等。对于我们今天的目的来说,我们将主要利用它的图形显示功能。
代码实现
下面是一个简单的由下向上滚动字幕的Python脚本示例:
import pygameimport osdef getColor():# 生成随机颜色,排除黑色color = (0, 0, 0)while color == (0, 0, 0): # 确保颜色不是黑色color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))return colordef render_barrage_list(texts, output_folder="frames"):# 初始化pygamepygame.init()# 设置窗口大小screen_width = 720screen_height = 1280fontsize = 20move_speed = 15 # 弹幕移动速度max_barrages = len(texts) # 同时显示的最大弹幕数量x_position = 50screen = pygame.display.set_mode((screen_width, screen_height))# 设置字体font = pygame.font.Font("msyh.ttc", fontsize) # 使用默认字体font.set_bold(True) # 设置字体加粗# 清除旧文件if not os.path.exists(output_folder):os.makedirs(output_folder)else:#清空文件夹内容for filename in os.listdir(output_folder):file_path = os.path.join(output_folder, filename)if os.path.isfile(file_path) or os.path.islink(file_path):os.unlink(file_path)# 设置背景颜色bg_color = (0, 0, 0,0)screen.fill(bg_color)# 弹幕参数line_height = font.get_linesize() + 10 # 每行文本的高度加上一些间隔barrage_interval = line_height # 弹幕之间的间隔# 初始化弹幕列表barrage_list = []for i, text in enumerate(texts):color = getColor()text_surface = font.render(text, True, color)# 弹幕左对齐y_position = (screen_height - 500) + (i % max_barrages) * barrage_intervalbarrage_list.append([text_surface, x_position, y_position])frame_index = 0# 渲染弹幕直到所有弹幕离开屏幕while any(y > -text_surface.get_height() for _, _, y in barrage_list):screen.fill(bg_color) # 清屏# 更新和绘制弹幕for i, (text_surface, x, y) in enumerate(barrage_list):text_rect = text_surface.get_rect(topleft=(x, y))screen.blit(text_surface, text_rect)# 更新弹幕位置barrage_list[i][2] -= move_speed# 保存帧pygame.image.save(screen, os.path.join(output_folder, f"frame_{frame_index:04d}.png"))frame_index += 1# 退出pygamepygame.quit()# 示例弹幕文本texts = [
" 控油去屑,终于找到救星了!",
"天然成分,用着放心,已回购!",
"滋润修护,受损发质变健康!",
"洗完头皮好舒服,无限回购!",
"性价比超高,值得购买!",
"洗发水中的佼佼者,必须点赞!",
"适合各种发质,全家都在用!",
"去屑效果显著,告别烦恼!",
"洗后不毛躁,顺滑到底!",
"持久留香,同事都问我用了啥!",
"温和无刺激,敏感肌也适用!",
"每次洗头都是享受,太棒了!",
"买对了洗发水,自信从头开始!",
"真心推荐,让你的头发焕发光彩!",
"用过最好用的洗发水,没有之一!",
"洗发水中的爱马仕,值得拥有!",
"一瓶解决多种头发问题,神奇!",
"想要秀发飘逸,选这款准没错!",]render_barrage_list(texts)
效果实现
代码解析
- 初始化和设置:首先,我们初始化
pygame
并设置窗口大小和标题。 - 字体和字幕:我们使用
pygame.font.Font
来设置字体和大小,并渲染字幕内容。 - 字幕位置:通过
get_rect()
方法获取字幕的矩形区域,并设置其初始位置。 - 滚动逻辑:在游戏主循环中,我们不断更新字幕的
y
坐标,使其向上移动。当字幕完全移出屏幕顶部时,我们将其重置到屏幕底部。 - 绘制和更新:在每次循环中,我们先清屏,然后绘制字幕,并更新屏幕显示。
结语
通过上述步骤,我们成功创建了一个简单的由下向上滚动的字幕效果。这只是一个基础示例,你可以根据需要调整字幕的速度、颜色、字体等属性,甚至可以扩展功能,比如添加背景音乐、实现用户输入的动态字幕等。Python和pygame
提供了强大的工具,可以帮助你实现各种创意效果。希望这个示例能为你的项目带来启发!
相关文章:
Python字幕滚动:为视频添加专业级动态效果!
Python实现由下向上滚动字幕 在数字媒体和编程领域,动态文本效果总能吸引观众的注意力。其中,滚动字幕是一种常见的视觉效果,经常用于视频、演示文稿和网页中。在Python中,我们可以通过多种方式来实现滚动字幕效果,比…...
Linux 系统中,将网络配置从 DHCP 改为静态 IP的几种方法
Linux 系统中,将网络配置从 DHCP 改为静态 IP 可以通过几种不同的方法来实现,下面是几种常见的方式: 方法一:使用 connman(Connection Manager) 如果你已经在使用 connman 管理网络,可以通过修…...
【jellyfin】解决Edge 浏览器播放 jellyfin 的 hevc/h265 视频“该客户端与媒体不兼容,服务器未发送兼容的媒体格式”错误
文章目录 问题原因分析解决方法 问题 在 windows 系统自带的 Edge 浏览器里网页播放 jellyfin 媒体库里的 hevc/h265 编码的视频时,总是提示 该客户端与媒体不兼容,服务器未发送兼容的媒体格式,无法播放视频。 原因分析 Edge 浏览器默认不…...
企业管理系统设计思路——毕业论文设计
根据企业对人事管理的要求,本系统可以实现以下目标: l 操作简单方便、界面简洁美观。 l 在查看员工信息时,可以对当前员工的家庭情况、培训情况进行添加、修改、删除的操作。 l 方便快捷的全方位数据查询。 l 按照指定的条件对员工进行统…...
Android 默认去掉URL网络校验,设置不进行网络校验
Android 系统连接WIFI显示网络连接受限分析处理_安卓13类原生系统网络受限-CSDN博客 package\modules\NetworkStack\src\com\android\networkstack\util\NetworkStackUtils.java public static final String CAPTIVE_PORTAL_MODE "captive_portal_mode"; //0 不…...
Python | Leetcode Python题解之第515题在每个树行中找最大值
题目: 题解: class Solution:def largestValues(self, root: Optional[TreeNode]) -> List[int]:if root is None:return []ans []q [root]while q:maxVal -inftmp qq []for node in tmp:maxVal max(maxVal, node.val)if node.left:q.append(n…...
Java泛型:类型安全的艺术
Java泛型是JDK 5中引入的一项重要特性,它为Java带来了类型安全的机制,极大地提升了代码的可读性和可维护性。泛型允许程序员在编译时检测非法类型,从而避免了运行时的ClassCastException异常,使得代码更加健壮和可靠。 泛型的基本…...
Redis 淘汰策略 问题
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 淘汰策略 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 淘汰策略 & 总结》(学习总结/最新最准/持续更新)《Redis &a…...
技术成神之路:设计模式(二十二)命令模式
相关文章:技术成神之路:二十三种设计模式(导航页) 介绍 命令模式(Command Pattern)是一种行为设计模式,允许将请求(命令)封装为对象,从而使您可以使用不同的请求、队列或记录请求日…...
facebook账号类型有哪些?
Facebook的主要账号类型 在Facebook上,用户可以基于不同的目的和需求创建不同类型的账号,主要包括以下几类: 1. 个人账号 这是最常见的Facebook账号类型,每个用户都可以创建一个个人账号,分享生活动态、与朋友互动、…...
Flutter鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
机器视觉:9点标定的原理与实现
一、什么是标定 标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素,如下图所示,10mm的距离内有222个像素,那像素坐标和实际的毫米坐标就有个比例关系了。 二、九点标定 9点标…...
《深度学习》 了解YOLO基本知识
目录 一、关于YOLO 1、什么是YOLO 2、经典的检测方法 1)one-stage单阶段检测 模型指标介绍: 2)two-stage多阶段检测 二、关于mAP指标 1、概念 2、IOU 3、关于召回率和准确率 4、示例 5、计算mAP 一、关于YOLO 1、什么是YOLO YOL…...
什么是Kubernetes?K8s基础与工作原理
什么是 Kubernetes(K8s)? Kubernetes,通常简称为 K8s,是一个用于自动化部署、扩展和管理容器化应用程序的开源容器编排平台。它由 Google 于 2014 年开源,后来交由 CNCF(Cloud Native Computin…...
HTML5新增属性
1、HTML5 1.1 新增布局标签 header:用于定义文档或者section的页眉;footer:用于定义页面或section的底部信息;nav:用于定位页面上的导航链接部分;article:用于定位文档或者页面中的独立部分&a…...
软件开发术语(E开头)---持续更新
e—business 电子商务EAI (enterprise application integration)企业应用程序集成(整合)EBCO (empty base class optimization) 空基类优化(机制)Edge and Vertex Connectivity 割边/割点 Edge Coloring 边染色 EDI (Dlectronic Data Interchange)电子数据交换effic…...
多机器人编队避障算法(1)
文章目录 前言一、基于感知的避障1.基于感知的Epuck2避障思路(理论)2.基于感知的Epuck2避障实现(现实)3.距离传感器结合红外传感器修复避障Bug4.问题5.代码逻辑图 二、基于人工势场力的避障1.基于人工势场的Epuck2避障思路(理论)2.基于人工势场力的Epuck2避障实现(现实) 三、两…...
【网站项目】SpringBoot401超市收银系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
KD树详解:多维数据高效搜索的利器
摘要 在处理多维数据时,如何高效地进行搜索与查询成为一个关键问题。KD树(K-Dimensional Tree)作为一种高效的多维数据结构,广泛应用于计算机视觉、机器人导航、数据库检索等领域。本文将详细介绍KD树的基本概念、结构、构建算法…...
从裸机到70B大模型2:基础设施设置与脚本
从裸机到70B大模型2:基础设施设置与脚本 随着深度学习技术的不断发展,神经网络模型的规模逐渐扩大,从单个模型到大型70B模型,所需的计算资源和存储空间也在不断增加。为了训练这些大型模型,我们需要一套高效的基础设施…...
shodan4,挂黑网站查找,弱口令网站搜索
myip参数 shodan myip(查看自己的出口IP,哪个地址链接的公网)挂黑网站查找 我们今天看一看找一下,有些已经被黑的网站好吧,就是利用shodan查看一下哪些网站已经被黑了。 shodan search -limit 10 -fields ip_str,port http.title:hacked b…...
spring boot 整合Knife4j
项目依赖配置 在本项目中,我们使用了以下关键依赖,以支持 Spring Boot 和 API 文档生成。 1. Spring Boot 版本 为了构建一个可靠和高效的 Spring Boot 应用程序,我们使用以下父级依赖: <parent><groupId>org.springframework.boot</groupId><art…...
攻防世界的新手web题解
攻防世界引导模式 1、disabled_button 好,给了一个按钮,第一道题目就不会做 看的wp<input disabled class"btn btn-default" style"height:50px;width:200px;" type"submit" value"flag" name"auth&q…...
【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线
在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…...
pytest 单元框架里,前置条件
1.使用 setup 函数级的(setup_function、teardown_function)只对函数用例生效,而且不在类中使用类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次 类中方…...
数字IC后端实现 | Innovus各个阶段常用命令汇总
应各位读者要求,小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅,这次只更新到powerplan阶段。有了这份Innovus常用命令汇总,学习数字IC后端从此不再迷路!如果大家觉得这个专题还不错,想继…...
MySQL全文索引检索中文
MySQL全文索引检索中文 5.7.6版本不支持中文检索,需要手动修改配置 ft_min_word_len 1 ,因为默认配置 4 SHOW VARIABLES LIKE ft%; show VARIABLES like ngram_token_size;配置 修改 MySQL 配置文件 vim /etc/my.cnf在配置的 [mysqld] 下面添加**ft_…...
pikachu靶场-Cross-Site Scripting(XSS)
sqli-labs靶场安装以及刷题记录-dockerpikachu靶场-Cross-Site Scripting pikachu靶场的安装刷题记录反射型xss(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 pikachu靶场的安装 刷题记录 反射型xss(get) …...
在数据库访问中,使用localhost、127.0.0.1和IP地址有什么差异
在数据库访问中,使用127.0.0.1和IP地址(在本地环境中通常指的是局域网IP或环回地址)的速度差异,实际上是非常微小的,甚至在很多情况下可以忽略不计。不过,为了更深入地理解这个问题,我们可以从以…...
C语言 | Leetcode C语言题解之第513题找树左下角的值
题目: 题解: #define MAX_NODE_SIZE 10000int findBottomLeftValue(struct TreeNode* root){int ret;struct TreeNode** queue (struct TreeNode **)malloc(sizeof(struct TreeNode) * MAX_NODE_SIZE);int head 0;int tail 0;queue[tail] root;whil…...
山西网站设计/快速排名生客seo
对于中断通俗点说:就是让单片机的cpu暂停执行当前任务转去执行引起中断的任务。刚开始学习单片机时非常排斥中断方面的东西因为要记忆很多寄存器相关的东西什么IE,IP等但是仔细一想如果不懂中断就只能写最简单的顺序执行程序而且非常浪费单片机的这些中断…...
eclipse做购物网站/福州seo技术培训
对于刚开始学QT的同学,在网上搜索许久之后会发现:一个简 单的 Qt 程序下面这个小程序,估计大家会感到比较亲切。似乎有相当多的中文用户尝试写过这样的代码:#include #include int main(int argc, char **argv){QApplication app(…...
网站建设前期规划论文/seo引擎优化外包公司
1.iPhone X的顶部有齐刘海,如果底部写一个fixed定位的底部悬浮不能到达底部,头部和底部都留有空隙,其实这是它的所谓的安全区,头部有44px,底部有34px。 2.完全充满 2.1在meta标签中声明viewport-fitcover <meta …...
有哪些做的比较好的网站/成都网站推广哪家专业
我正在使用php创建一个xml文件.生成的XML是.PeterVJohnMale但是如果值为null,则生成的xml是(查看节点插入).PeterJohnMale如果值为null,我希望创建xml以使其生成.PeterJohnMale这是我的代码.$doc new DOMDocument(1.0);$doc->formatOutput true;$root $doc->createEle…...
怎么重新装wordpress/免费的外贸网站推广方法
一. 基本介绍 awk 是一门特殊的编程语言, 它非常适合处理一些任务(改变数据格式、验证数据的有效性、搜索特定的数据项、求和、打印报表等), 经常只需要一两行便可搞定。 一个 awk 程序由一系列的模式和动作组成, 这些模式与动作说明了在输入中搜索哪些…...
2019年做网站还有机会吗/制造业中小微企业
Determine file-access permission.int _access( const char *path, int mode );声明于 io.h #include <io.h> C _access和_waccess的使用方法 概述 头文件:<io.h> 判断文件的访问权限 原型 int _access( const char *path, int mode ); i…...