如何使用Python生成跑马灯视频

news2024/12/26 23:49:01

在这篇博客中,我将向您展示如何使用Python语言生成一个简单的跑马灯视频。我们将使用OpenCV和Pillow两个库来实现这个功能。

安装依赖库
首先,我们需要安装opencv-python和Pillow两个库。您可以使用以下命令来安装它们:

pip install opencv-python Pillow

接下来,我们来编写一个简单的Python脚本,它可以根据您提供的文本内容生成一个跑马灯视频。下面是完整的代码:

完整代码

from PIL import Image, ImageDraw, ImageFont
import cv2
import numpy as np
from threading import Thread

def generate_video(text):
    # 视频分辨率
    width = 1920
    height = 1080

    # 背景颜色和字体颜色
    background_color = (255,0, 0, 255) # 红色背景
    text_color = (255, 255, 255) # 白色字体

    # 字体大小和类型
    font_size = int(height * 0.60)
    font = ImageFont.truetype('msyh.ttc', font_size)

    # 计算文本大小
    text_size = font.getsize(text)

    # 计算视频长度
    video_length = int((width + text_size[0]) / 20)

    # 创建视频写入器
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    video_writer = cv2.VideoWriter(r'E:\Template\word\marquee.mp4', fourcc, 60, (width, height))

    def update_progress(progress):
        print('\r[{}{}] {:.2f}%'.format('#' * int(progress * 10), ' ' * (10 - int(progress * 10)), progress * 100), end='')

    def export_video():
        for i in range(video_length):
            # 创建背景图像
            img = Image.new('RGB', (width, height), background_color)

            # 添加文本
            draw = ImageDraw.Draw(img)
            x = width - i * 20
            y = int(height / 2 - text_size[1] / 2)
            draw.text((x, y), text, fill=text_color, font=font)

            # 写入视频帧
            video_writer.write(cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR))

            # 更新进度条
            update_progress(i / video_length)

        # 关闭视频写入器
        video_writer.release()
        print('\n视频导出完成!')

    # 使用多线程优化视频导出速度
    export_thread = Thread(target=export_video)
    export_thread.start()

generate_video('这里是您要显示的文本')

效果图

在这里插入图片描述

在上面的代码中,我们首先定义了一些参数,包括视频分辨率、背景颜色、字体颜色、字体大小和类型等。然后,我们使用Pillow库中的ImageFont类来加载字体文件,并计算文本的大小。接着,我们根据文本大小计算出视频的长度。

然后,我们创建一个OpenCV的VideoWriter对象,用于将图像帧写入视频文件。在导出视频的过程中,我们使用Pillow库中的Image类创建一个纯色背景图像,并使用ImageDraw类在图像上绘制文本。最后,我们将图像转换为NumPy数组,并使用OpenCV将其写入视频文件。

为了优化视频导出速度,我们使用了多线程技术。在导出过程中,我们还实时更新了一个进度条,以便用户了解导出进度。

运行脚本
在运行上面的脚本之前,您需要确保您的计算机上安装了微软雅黑字体(msyh.ttc)。如果您使用的是其他字体文件,您需要将代码中的

font = ImageFont.truetype('msyh.ttc', font_size)

这一行中的msyh.ttc替换为您使用的字体文件的路径。

运行此脚本后,它将在E:\Template\word目录下生成一个名为marquee.mp4的视频文件。导出过程中,它会在控制台中输出进度条。

总结

在这篇博客中,我们学习了如何使用Python语言生成一个简单的跑马灯视频。我们使用了OpenCV和Pillow两个库来实现这个功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Navicat 设置PostgreSQL数据库的表主键ID自增

文章目录 1 新建序列1.1 手动新建1.2 SQL语句新建 2 设置主键自增 1 新建序列 1.1 手动新建 选择 其他->序列 选择一个模式(例如public),然后选择新增序列。 设置序列参数 刷新序列列表即可看到新建的序列 注意: 序列的最大…

C语言实现2048小游戏

大部分同学学习C语言编程以后不知道能通过什么样的项目才可以锻炼自己的思维功力,2048相信大家都应该熟悉,不管是手机上还是网页版的相信大家都玩过,这个简单的控制台版本的游戏是我曾经在伟易达上班时一个嵌入式应用游戏部门的大佬设计的,适…

简单使用gateway,以及gateway所需要的依赖

先声明,使用gateway需要有一定的SpringCloud的基础,再来使用时会看的很明白,使用前需要先开nacos服务,,确定无误。 下面直接开始 首先我们需要两个原来通信的模块,这里分别是service-const与service-provid…

《导航帖》-全系列软考A计划

专栏分享 点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 文章目录 👉关于作者👉前提👉链接追踪&#x1f449…

高通 Camera HAL3:项目开发技术点总结

做高通 Camera HAL3开发的一些技术点的总结、整理。 做个记录,方便后续查阅。 1.目录、so、配置文件 productName是项目名 out Target路径:\out\target\product\productName\chi-cdk:\vendor\qcom\proprietary\chi-cdk\ldc node&#xff1…

【Hive】安装配置及导入Hdfs数据

知识目录 一、写在前面💕二、Hive的安装与配置✨2.1 Hive简介2.2 上传与解压2.3 拷贝MySQL驱动2.4 hive-site.xml文件2.5 启动hive 三、导入Hdfs数据到Hive✨3.1 修改Hadoop集群配置3.2 初始化3.3 创建表3.4 从Hdfs导入数据 四、总结撒花😊 一、写在前面…

【Leetcode】贪心 区间问题 | 用最小数量的箭引爆气球、无重叠区间、划分字母区间、合并区间

452 用最少数量的箭引爆气球 更像一个重叠区间问题,贪心策略:应该在重叠最多处射出。 按区间左端点递增序进行排序,左端点相同时,按右端点递增序排序。 现在欲射穿气球 i i i,当发现相邻的两个区间有重叠时&#xff…

[230604] 听力TPO66汇总·上篇| C1 L1 C2|10:20~12:00

目录​​​​​​​ Science Fiction And Sci-fi-C1 错题分析 C1-3 细节双选题 C1 精听练习 做题笔记 Financial Advice-C2 全对 C2 精听练习 Sleep-L1 错题分析 L1-4 细节题 L1-5 细节双选题 L1 精听练习 做题笔记 词汇:http://t.csdn.cn/Zhuws 两篇对…

编译型语言与解释型语言的区别

用比喻来明编译型语言和解释型语言的区别: 假设你要理解一本书(源代码)将转化为一篇演讲稿(机器代码)。 编译型语言类似于你将整本书翻译成一篇演讲稿。你需要在事先对整本书进行翻译,将其转化为一份完整…

chatgpt赋能python:Python如何使用while函数倒序输出数字?

Python如何使用while函数倒序输出数字? Python是一种高级编程语言,它易于学习、易于使用,这使得它成为了非常受欢迎的编程语言之一。Python在各种应用程序中都有着广泛的应用,从Web开发到数据分析,甚至是人工智能等领…

脑疾病患者福音,又一家脑机接口公司完成首次人体试验

近日,脑机接口公司Precision Neuroscience宣布完成其神经植入系统的首次人体临床试验,该公司设计的植入系统在1平方厘米的面积上有1024个微型电极,这些电极被嵌入到与大脑表面一致的柔性薄膜中。这种薄膜只有人类头发厚度的五分之一&#xff…

chatgpt赋能python:Python中如何倒着输出字符串

Python中如何倒着输出字符串 在Python编程中,字符串是一种不可避免的数据类型,我们往往需要对字符串进行各种操作。其中,倒着输出字符串是一项基本的操作,对于初学者来说,可能并不是很容易理解。本文将介绍如何使用Py…

【算法题001】面试题 01.01. 判定字符是否唯一

题目来源:《程序员面试金典(第 6 版)》 1、Problem: 面试题 01.01. 判定字符是否唯一 文章目录 面试题 01.01. 判定字符是否唯一一、题目描述二、解决方案(一)方案一1、解题思路2、解题方法3、复杂度4、代码实现 &…

二本4年Java经验,大佬五面阿里(定薪45K)

前段时间刚面试上岸,先后面试了各大小公司,拿了一些 offer,有阿里,滴滴,快手,达达,得物等公司。面试的公司大部分都能过,所以这里给大家分享下自己的经验,也给自己做个归…

地震勘探基础(十二)之地震偏移处理

地震偏移处理 地震数据常规处理主要包括地震反褶积,水平叠加和地震偏移成像三大类。地震反褶积通过压缩地震子波提高地震分辨率,水平叠加的目的是提高信噪比,地震偏移成像的目的是提高地震空间分辨率和地震保真度。 在20世纪50年代&#xf…

【1】Midjourney新手必读

Midjourney官网网站:https://www.midjourney.com/ 问题一:Midjourney是什么 Midjourney 是 AI 生成算图工具,输入文字就会自动产生图像,目前架设在Discord频道上。 问题二:Discord频道是什么 Discord是国外的一个社…

Matlab快速入门——数组

学习目标:学习关于数组的详细知识(喜欢的别忘记点赞收藏呦) clear all; A[] %空数组 B[5 6 5 4 1] %行向量 C[5,5,5,4,4] %行向量 D[3;3;3;3;5] %列向量 EC %对行向量转置得到列向量 clear all…

实验篇(7.2) 09. 通过安全隧道走对方宽带上网 (FortiClient-IPsec) ❀ 远程访问

【简介】要想所有的流量都走安全隧道,就需要禁用隧道分割。这样上网流量也会通过隧道到达远端防火墙,再通过远端防火墙的宽带接口去到互联网。我们来看看FortiClient客户端用IPsec VPN是如何实现的。 实验要求与环境 OldMei集团深圳总部防火墙有两条宽带…

006:vue中el-tree 添加右键菜单的方法

第006个 查看专栏目录: 按照VUE知识点 ------ 按照element UI知识点 echarts,openlayers,cesium,leaflet,mapbox,d3,canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下,本专栏…

document.URL与document.documentURI

document.URL与document.documentURI document.URL document.URL 返回当前文档的 URL 地址 该属性的值和DOM Level 0 中的document.location.href 属性的值是相等的。然而 document.location.href 是可写的,document.URL 是只读的。 document.documentURI 也返回…