使用Python生成跑馬燈視頻的完整代碼
安裝依賴庫(kù) 首先,我們需要安裝opencv-python和Pillow兩個(gè)庫(kù)。您可以使用以下命令來(lái)安裝它們:
pip install opencv-python Pillow
接下來(lái),我們來(lái)編寫(xiě)一個(gè)簡(jiǎn)單的Python腳本,它可以根據(jù)您提供的文本內(nèi)容生成一個(gè)跑馬燈視頻。下面是完整的代碼:
完整代碼
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) # 計(jì)算文本大小 text_size = font.getsize(text) # 計(jì)算視頻長(zhǎng)度 video_length = int((width + text_size[0]) / 20) # 創(chuàng)建視頻寫(xiě)入器 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): # 創(chuàng)建背景圖像 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) # 寫(xiě)入視頻幀 video_writer.write(cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)) # 更新進(jìn)度條 update_progress(i / video_length) # 關(guān)閉視頻寫(xiě)入器 video_writer.release() print('\n視頻導(dǎo)出完成!') # 使用多線程優(yōu)化視頻導(dǎo)出速度 export_thread = Thread(target=export_video) export_thread.start() generate_video('這里是您要顯示的文本')
效果圖
在上面的代碼中,我們首先定義了一些參數(shù),包括視頻分辨率、背景顏色、字體顏色、字體大小和類型等。然后,我們使用Pillow庫(kù)中的ImageFont類來(lái)加載字體文件,并計(jì)算文本的大小。接著,我們根據(jù)文本大小計(jì)算出視頻的長(zhǎng)度。
然后,我們創(chuàng)建一個(gè)OpenCV的VideoWriter對(duì)象,用于將圖像幀寫(xiě)入視頻文件。在導(dǎo)出視頻的過(guò)程中,我們使用Pillow庫(kù)中的Image類創(chuàng)建一個(gè)純色背景圖像,并使用ImageDraw類在圖像上繪制文本。最后,我們將圖像轉(zhuǎn)換為NumPy數(shù)組,并使用OpenCV將其寫(xiě)入視頻文件。
為了優(yōu)化視頻導(dǎo)出速度,我們使用了多線程技術(shù)。在導(dǎo)出過(guò)程中,我們還實(shí)時(shí)更新了一個(gè)進(jìn)度條,以便用戶了解導(dǎo)出進(jìn)度。
運(yùn)行腳本 在運(yùn)行上面的腳本之前,您需要確保您的計(jì)算機(jī)上安裝了微軟雅黑字體(msyh.ttc)。如果您使用的是其他字體文件,您需要將代碼中的
font = ImageFont.truetype('msyh.ttc', font_size)
這一行中的msyh.ttc替換為您使用的字體文件的路徑。
運(yùn)行此腳本后,它將在E:\Template\word目錄下生成一個(gè)名為marquee.mp4的視頻文件。導(dǎo)出過(guò)程中,它會(huì)在控制臺(tái)中輸出進(jìn)度條。
以上就是使用Python生成跑馬燈視頻的完整代碼的詳細(xì)內(nèi)容,更多關(guān)于Python跑馬燈視頻的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Pandas實(shí)現(xiàn)可視化帶有標(biāo)簽列的數(shù)據(jù)表
Pandas是Python中一個(gè)靈活強(qiáng)大的數(shù)據(jù)處理庫(kù),它提供了大量數(shù)據(jù)操作和分析工具,本文我們將討論如何使用Pandas可視化帶有標(biāo)簽列的數(shù)據(jù)表,以便更好地呈現(xiàn)和傳達(dá)數(shù)據(jù)的信息,需要的可以了解下2024-02-02python中property屬性的介紹及其應(yīng)用詳解
這篇文章主要介紹了python中property屬性的介紹及其應(yīng)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08python線程池的實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了python線程池的實(shí)現(xiàn)方法,代碼簡(jiǎn)單實(shí)用,供大家參考使用2013-11-11python實(shí)現(xiàn)AES算法及AES-CFB8加解密源碼
這篇文章主要為大家介紹了python實(shí)現(xiàn)AES算法及AES-CFB8加解密的源碼示例,有需要朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-0213個(gè)你可能未使用過(guò)的Python特性分享
Python?是頂級(jí)編程語(yǔ)言之一,它具有許多程序員從未使用過(guò)的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過(guò)的13?個(gè)?Python?特性,感興趣的可以學(xué)習(xí)一下2022-11-11Python中列表和元組的相關(guān)語(yǔ)句和方法講解
這篇文章主要介紹了Python中列表和元組的相關(guān)語(yǔ)句和方法講解,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08使用virtualenv創(chuàng)建Python環(huán)境及PyQT5環(huán)境配置的方法
這篇文章主要介紹了使用virtualenv創(chuàng)建Python環(huán)境及PyQT5環(huán)境配置的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Python讀取Json字典寫(xiě)入Excel表格的方法
這篇文章主要為大家詳細(xì)介紹了Python讀取Json字典寫(xiě)入Excel表格的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01簡(jiǎn)單介紹一下pyinstaller打包以及安全性的實(shí)現(xiàn)
這篇文章主要介紹了簡(jiǎn)單介紹一下pyinstaller打包以及安全性的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06基于Python編寫(xiě)一個(gè)語(yǔ)音合成系統(tǒng)
這篇文章主要介紹了如何利用Python制作一個(gè)語(yǔ)音合成系統(tǒng),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下2022-03-03