抖音字符視頻在去年火過一段時間。
反正我是始終忘不了那段極樂淨土的音樂...
這一次自己也來實現一波,做一個字符視頻出來。
主要用到的庫有cv2,pillow庫。
原視頻,直接抖音下載的,妥妥的水印。
/ 01 / 視頻轉圖片
在Pycharm上直接安裝cv2庫是成功不了的,具體什麼原因我也不清楚。
經過我的實踐,發現只需在Pycharm的虛擬環境下。
運行下面這個命令,即可成功安裝cv2這個庫。
pip3 install opencv-python
不過還是會出現下載速度過慢,導致超時。
如果實在不行就可以去官網,下個.whl格式來安裝。
視頻轉圖片代碼如下。
import cv2
import os
# 在當前目錄下新建文件夾
folder_path = "img_bear/"
os.makedirs(folder_path)
# 進行視頻的載入
vc = cv2.VideoCapture('bear.mp4')
c = 0
# 判斷載入的視頻是否可以打開
ret = vc.isOpened()
# 循環讀取視頻幀
while ret:
c = c + 1
# 進行單張圖片的讀取,ret的值爲True或者Flase,frame表示讀入的圖片
ret, frame = vc.read()
if ret:
# 存儲爲圖像
cv2.imwrite('img_bear/'+str(c) + '.jpg', frame)
# 輸出圖像名稱
print('img_bear/'+str(c) + '.jpg')
# 在一個給定的時間內(單位ms)等待用戶按鍵觸發,1ms
cv2.waitKey(1)
else:
break
# 視頻釋放
vc.release()
最後成功生成了369張圖片。
呆萌呆萌的××熊,我是不知道什麼品種的熊...
/ 02 / 圖片轉字符
普通圖片轉字符圖片主要使用了pillow庫。
對圖片做灰度處理,然後根據圖片像素點的灰度值,添加對應的字符。
具體代碼如下。
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
# 創建字符圖片文件夾
folder_path = "bear/"
os.makedirs(folder_path)
for i in range(1, 1000):
filename = 'img_bear/' + str(i) + '.jpg'
# 字符列表
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~ <>i!lI;:,\"^`'. ")
# 判斷圖片是否存在
if os.path.exists(filename):
# 將圖片轉化爲灰度圖像,並重設大小
img_array = np.array(Image.open(filename).resize((70, 70), Image.ANTIALIAS).convert('L'))
# 創建新的圖片對象
img = Image.new('L', (560, 560), 255)
draw_object = ImageDraw.Draw(img)
# 設置字體
font = ImageFont.truetype('consola.ttf', 10, encoding='unic')
# 根據灰度值添加對應的字符
for j in range(70):
for k in range(70):
x, y = k * 8, j * 8
index = int(img_array[j][k] / 4)
draw_object.text((x, y), ascii_char[index], font=font, fill=0)
name = 'bear/' + str(i) + '.jpg'
print(name)
# 保存字符圖片
img.save(name, 'JPEG')
最後成功生成了字符圖片。
和上面的原圖一樣,也是369張。
/ 03 / 字符轉視頻
接下來使用cv2庫,將字符圖片轉化爲視頻。
具體代碼如下。
import cv2
import os
# 設置視頻編碼器,這裏使用使用MJPG編碼器
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 輸出視頻參數設置,包含視頻文件名、編碼器、幀率、視頻寬高(此處參數需和字符圖片大小一致)
videoWriter = cv2.VideoWriter('bear_character.avi', fourcc, 20.0, (560, 560))
for i in range(1, 1000):
filename = 'bear/'+str(i)+'.jpg'
# 判斷圖片是否存在
if os.path.exists(filename):
img = cv2.imread(filename=filename)
# 在一個給定的時間內(單位ms)等待用戶按鍵觸發,100ms
cv2.waitKey(100)
# 將圖片寫入視頻中
videoWriter.write(img)
print(str(i) + '.jpg' + ' done!')
# 視頻釋放
videoWriter.release()
最後成功生成字符視頻,這裏放個圖
如果你依然在編程的世界裏迷茫,不知道自己的未來規劃,可以加入我們的Python學習扣qun:784758214,看看前輩們是如何學習的!交流經驗!
自己是一名高級python開發工程師,從基礎的python腳本到web開發、爬蟲、django、人工智能、數據挖掘等,零基礎到項目實戰的資料都有整理。
送給每一位python的小夥伴!分享一些學習的方法和需要注意的小細節,這裏是python學習者聚集地
點擊:python技術分享