用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&…

python学习实例(5)

# #5.1 计算思维是什么 ##<程序: 找假币的第一种方法> by Edwin Sha def findcoin_1(L):if len(L) <1:print("Error: coins are too few"); quit()i0while i<len(L):if L[i] < L[i1]: return (i)elif L[i] > L[i1]: return (i1)ii1print("All…

一个用LaTeX写长除法计算过程的示例

源码 \begin{array}{lr} & x1 \\ x1 \!\!\!\!\!\! & \overline{)x^2 2x 1} \\ & \underline{x^2\ \ x\ \ \ \ \ \ \ } \\ & x 1 \\ & \underline{x1} \\ & 0 \end{array}效果 x1x1⁣ ⁣ ⁣ ⁣ ⁣ ⁣)x22x1‾x2x‾x1x1‾0\begin{array}…

AltiumDesigner中PCB如何添加 Logo

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

python学习实例(6)

# #6.6 文件系统&#xff08;File System&#xff09; ## #6.6.3 Python中的文件操作 ##<程序&#xff1a;读取文件os.py> f open("./Task1.txt",r); fls f.readlines() for line in fls:line line.strip(); print (line) f.close()#<程序&#xff1a;读…

网络视频ts格式文件下载及将其合成单一视频文件

一些网站会将视频分割成n个ts文件。 用猫抓chrome插件&#xff0c;抓取index.m3u8&#xff0c;可得到众多ts文件下载地址。 可用迅雷打包下载ts文件以及index.m3u8文件&#xff0c;但有时会出现下载不了的情况&#xff0c;怀疑是请求报头的问题上。 若迅雷下载不了&#xff…

PCB布局,布线技巧总结

PCB布局 在设计中&#xff0c;布局是一个重要的环节。布局结果的好坏将直接影响布线的效果&#xff0c;因此可以这样认为&#xff0c;合理的布局是PCB设计成功的第一步。 布局的方式分两种&#xff0c;一种是交互式布局&#xff0c;另一种是自动布局&#xff0c;一般是在自动布…

python学习实例(7)

# #第8章 信息安全&#xff08;Information Security&#xff09;的python程序 ## #8.3 措施和技术 ## #8.3.1 密码学 ##非对称加密#<程序&#xff1a;把n分解成p*q> import math n 221 m int(math.ceil(math.sqrt(n))) flag 0 for i in range(2,m1,1):if n % i 0:pr…

什么是TTL电平、CMOS电平、RS232电平

工作中遇到一个关于电平选择的问题,居然给忘记RS232电平的定义了,当时无法反应上来,回来之后查找资料才了解两者之间的区别,视乎两年多的时间,之前非常熟悉的一些常识也开始淡忘,这个可不是一个好的现象.:-),还是把关于三种常见的电平的区别copy到这里.做加深记忆的效果之用.. …

RFI滤波器电路

RFI滤波器电路 最实用解决方案是通过使用一个差分低通滤波器在仪表放大器前提供 RF 衰减滤波器。该滤波器需要完成三项工作&#xff1a;尽可能多地从输入端去除 RF能量&#xff0c;保持每个输入端和地之间的 AC 信号平衡&#xff0c;以及在测量带宽内保持足够高的输入阻抗以避免…

使用Ultra Librarian 生成PCB库文件

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

借汉诺塔理解栈与递归

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

简单迷宫问题

迷宫实验是取自心理学的一个古典实验。在该实验中&#xff0c;把一只老鼠从一个无顶大盒子的门放入&#xff0c;在盒子中设置了许多墙&#xff0c;对行进方向形成了多处阻挡。盒子仅有一个出口&#xff0c;在出口处放置一块奶酪&#xff0c;吸引老鼠在迷宫中寻找道路以到达出口…

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

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

BFPRT

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

180°舵机的使用步骤

一.步骤 1.首先查看舵机的运行参数&#xff0c;包括工作的电压和电流&#xff0c;转1&#xff08;60&#xff09;需要的脉宽是多少。 2.根据舵机提供的参数&#xff0c;算出需要的PWM的周期和脉宽的范围。 3.通过单片机或者其他数字电路产生相应的PWM波&#xff0c;便可以驱…

Qt开源项目

图像处理&#xff1a; Krita digikam inkscape 编辑器&#xff1a; LiteIDE QDevelper KDeveloper Monkey Studio TeXstudio 绘图&#xff1a; ZeGrapher QtiPlot qcustomplot QWT HotShots Inkscape 三维建模&#xff1a; QCAD FreeCAD OpenModelica LibreCAD 音乐&#xff1a…

使用Python作为计算器

数值 1.python支持基本的数学运算符&#xff0c;而且应用python你可以像写数学公式那样简单明了。 eg: >>> 2 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5 # division always returns a floating point number 1.6 2.除法…

java整体打印二叉树

一个调的很好的打印二叉树的代码。 用空格和^v来表示节点之间的关系。 效果是这样&#xff1a; Binary Tree: v7v v6v ^5^ H4H …

前缀树

是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是&#xff1a;利用字符串的公共前缀来减少查询时间&#xff0c;最大限度地减少无谓的字符…