用Python批量生成字幕图片用于视频剪辑

说明

视频剪辑时需要为视频添加字幕,添加字幕方法之一:根据字幕文本文件批量生成透明底只有字幕内容的图片文件,如下图,然后将这些图片文件添加到视频剪辑软件轨道中。
在这里插入图片描述
于是用pillow这Python图片工具库执行本次批量生成工作。

前提

  1. pip intall pillow

放码

from PIL import Image, ImageDraw, ImageFont
import osimageWidth, imageHeight = 1920, 1080
fontsFolderPath = 'C:\\Users\\Jallen\\AppData\\Local\\Microsoft\\Windows\\Fonts'
fontFilePath = os.path.join(fontsFolderPath, 'Alibaba-PuHuiTi-Regular.otf')def test():im = Image.new('RGBA', (imageWidth, imageHeight))draw = ImageDraw.Draw(im)text='你好,字体'alibabaFont = ImageFont.truetype(fontFilePath, 50)textSize = alibabaFont.getsize(text)startX = (imageWidth - textSize[0]) / 2.0startY = (imageHeight - textSize[1]) / 2.0draw.text((startX, startY), text, fill='white', font=alibabaFont, stroke_width=1, stroke_fill='black')im.save('test.png')def makeImageWithOneLine(imWidth, imHeight, textY, text, imFileName, fontSize=50):im = Image.new('RGBA', (imWidth, imHeight))draw = ImageDraw.Draw(im)alibabaFont = ImageFont.truetype(fontFilePath, fontSize)textSize = alibabaFont.getsize(text)startX = (imWidth - textSize[0]) / 2.0 #水平居中startY = textY#(imHeight - textSize[1]) / 2.0draw.text((startX, startY), text, fill='white', font=alibabaFont, stroke_width=1, stroke_fill='black')im.save(imFileName)def makeImageWithTwoLines(imWidth, imHeight, textY, text1, text2, imFileName, fontSize1=50, fontSize2=50):im = Image.new('RGBA', (imWidth, imHeight))draw = ImageDraw.Draw(im)alibabaFont1 = ImageFont.truetype(fontFilePath, fontSize1)#如有必要,可缓存起来alibabaFont2 = ImageFont.truetype(fontFilePath, fontSize2)textSize1 = alibabaFont1.getsize(text1)textSize2 = alibabaFont2.getsize(text2)startX1 = (imWidth - textSize1[0]) / 2.0 #水平居中startY1 = textY#(imHeight - textSize1[1]) / 2.0startX2 = (imWidth - textSize2[0]) / 2.0startY2 = startY1 + textSize1[1]draw.text((startX1, startY1), text1, fill='white', font=alibabaFont1, stroke_width=1, stroke_fill='black')draw.text((startX2, startY2), text2, fill='white', font=alibabaFont2, stroke_width=1, stroke_fill='black')im.save(imFileName)if  __name__ == '__main__':#test()inFile = open("in/a.txt", encoding="utf-8")#字幕文件count = 0for line in inFile.readlines():en, ch = line.split("/")print(line)#makeImageWithOneLine(imageWidth, imageHeight, 1000, en, "out/subtitle_%d.png" % count)makeImageWithTwoLines(imageWidth, imageHeight, imageHeight - 130, en, ch, \"out/subtitle_%d.png" % count, 60, 30)count += 1#print(ch)

参考

  1. 《Python编程快速上手—让繁琐工作自动化》
  2. 【PR教程】PR如何快速批量制作字幕?还能实时修改!
  3. Pillow doc

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

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

相关文章

关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮

除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中,大致有以下几种地线: (1)数字地:也叫逻辑地,是各种开关量(数字量)信号的零电位。 (2&…

AltiumDesigner中PCB如何添加 Logo

AltiumDesigner中PCB如何添加 Logo 转载2015-10-29 00:07:55标签:it文化教育首先用到的画图软件,当然是大家熟悉的Altium Designer了,呵呵,相信很多人都用过这款画图软件吧(现在电路设计一直在用)&#xff…

使用Ultra Librarian 生成PCB库文件

第一步:找到对应芯片的CAD文件,以OPA350为例: http://www.ti.com/product/opa350 第二步: 下载上图右边连接的 Ultra Librarian.zip , 然后根据提示,安装。 安装好后打开Ultra Librarian,会出现…

借汉诺塔理解栈与递归

我们先说,在一个函数中,调用另一个函数。 首先,要意识到,函数中的代码和平常所写代码一样,也都是要执行完的,只有执行完代码,或者遇到return,才会停止。 那么,我们在函…

qt超强绘图控件qwt - 安装及配置

qwt是一个基于LGPL版权协议的开源项目, 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供, 输出方式可以是…

BFPRT

在一大堆数中求其前k大或前k小的问题,简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是BFPRT算法,其又称为中位数的中位数算法,该算法由Blum、Floyd、Pratt、Rivest、Tarjan提出,最坏时间复杂度为O(n)O(n)。 读者要会快速排序…

HistCite 的使用方法

摘要 读文献自然要读精品,在面对一个陌生领域,如何才能以最快速度定位精品文献呢?本文将详细介绍 HistCite 的使用方法,结合 Web of Science 和 Endnote ,演示如何在几个小时之内,对某个陌生领域的文献进行…

数据结构课上笔记7

介绍栈和队列基本概念和用法。 设输入序列1、2、3、4,则下述序列中( )不可能是出栈序列。【中科院中国科技大学2005】 A. 1、2、3、4 B. 4、 3、2、1 C. 1、3、4、2 D.4、1、2、3 选…

ROC曲线与AUC值

ROC曲线与AUC值 1.概述AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准。这样的标准其实有很多,例如:大约10年前在machine learning文献中一统天下的标准:分类精度;在信息检索(IR)领域中常…

设置SSH免密码自动登录(使用别名)

每次登录服务器都要写一大串的用户名(username服务器地址)和登录密码十分的繁琐,所以本文就告诉大家如何通过修改配置文件,达到只需要输入:ssh jack(你起的别名)就可以一键登录到服务器中。 1.创建公钥(相当…

串的定长表示

思想和代码都不难&#xff0c;和线性表也差不多&#xff0c;串本来就是数据受限的线性表。 串连接&#xff1a; #include <stdio.h> #include <string.h> //串的定长顺序存储表示 #define MAXSTRLEN 255 //用户可在255以内定义最大串长 typedef unsigned cha…

轻松理解牛顿迭代法且用其求平方根

牛顿迭代法概述 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉弗森方法&#xff08;Newton-Raphson method&#xff09;&#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 牛顿迭代公式 设rrr是f(x)0f(x)0f(x)0的根&#…

如何使用cookie信息,完成自动登录

在做爬虫任务的时候&#xff0c;我们常常会遇到很多网页必须登录后&#xff0c;才可以开放某些页面。所以登录是爬取网页的第一步。但是&#xff0c;通过post表单&#xff08;包含用户名和密码&#xff09;的方法&#xff0c;对于那些不需要输入比较复杂的验证码的网页&#xf…

Spring Cloud 学习笔记(1 / 3)

Spring Cloud 学习笔记&#xff08;2 / 3&#xff09; Spring Cloud 学习笔记&#xff08;3 / 3&#xff09; ---01_前言闲聊和课程说明02_零基础微服务架构理论入门03_第二季Boot和Cloud版本选型04_Cloud组件停更说明05_父工程Project空间新建06_父工程pom文件07_复习Depend…

后缀树/后缀数组

字典树&#xff1a;https://blog.csdn.net/hebtu666/article/details/83141560 后缀树&#xff1a;后缀树&#xff0c;就是把一串字符的所有后缀保存并且压缩的字典树。 相对于字典树来说&#xff0c;后缀树并不是针对大量字符串的&#xff0c;而是针对一个或几个字符串来解决…

kaggle(02)-房价预测案例(基础版)

房价预测案例 Step 1: 检视源数据集 import numpy as np import pandas as pd读入数据 一般来说源数据的index那一栏没什么用&#xff0c;我们可以用来作为我们pandas dataframe的index。这样之后要是检索起来也省事儿。 有人的地方就有鄙视链。跟知乎一样。Kaggle的也是个处…

如何使用github中的pull request功能?

* pull request是社会化编程的象征&#xff0c;通过这个功能&#xff0c;你可以参与到别人开发的项目中&#xff0c;并做出自己的贡献。pull request是自己修改源代码后&#xff0c;请求对方仓库采纳的一种行为*–《github入门与实践》 下面具体说一下github中使用pull reque…

「假装努力」

有多少人在「假装努力」&#xff1f; 又有多少人在「真正成长」&#xff1f; 再努力努力 回想起当年毕业后&#xff0c;在北京和室友合租的日子。 那时&#xff0c;我在工作&#xff0c;室友在培训。 一天&#xff0c;我下班回来&#xff0c;听见他在电话里和家人争吵&…

如何阅读论文?

本文主要讲述了如何才能高效的阅读一篇论文&#xff01;&#xff01;

数据结构课上笔记8

串的概念&#xff1a;串&#xff08;字符串&#xff09;&#xff1a;是由 0 个或多个字符组成的有限序列。 通常记为&#xff1a;s ‘ a1 a2 a3 … ai …an ’ ( n≥0 )。 串的逻辑结构和线性表极为相似。 一些串的类型&#xff1a; 空串&#xff1a;不含任何字符的串&#x…