網(wǎng)站首頁 編程語言 正文
說明
視頻剪輯時需要為視頻添加字幕,添加字幕方法之一:根據(jù)字幕文本文件批量生成透明底只有字幕內(nèi)容的圖片文件,如下圖,然后將這些圖片文件添加到視頻剪輯軟件軌道中。
于是用pillow這Python圖片工具庫執(zhí)行本次批量生成工作。
前提
pip intall pillow
放碼
from PIL import Image, ImageDraw, ImageFont
import os
imageWidth, 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.0
startY = (imageHeight - textSize[1]) / 2.0
draw.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.0
draw.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.0
startX2 = (imWidth - textSize2[0]) / 2.0
startY2 = 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 = 0
for 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)
原文鏈接:https://blog.csdn.net/u011863024/article/details/124893579
相關(guān)推薦
- 2022-07-04 聯(lián)邦學(xué)習(xí)FedAvg中模型聚合過程的理解分析_其它綜合
- 2022-05-13 Django-Cookies && Session
- 2022-05-27 android實現(xiàn)簡單拼圖游戲_Android
- 2024-03-24 go 連接redis集群
- 2022-06-04 C++求解二叉樹的下一個結(jié)點問題_C 語言
- 2022-11-17 VMware?vSphere?ESXi系統(tǒng)設(shè)置靜態(tài)IP的方法_VMware
- 2022-05-06 python使用xlrd模塊讀取excel的方法實例_python
- 2022-07-03 kafka?rabbitMQ及rocketMQ隊列的消息可靠性保證分析_相關(guān)技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支