抖音字符視頻在去年火過一段時間。
反正我是始終忘不了那段極樂凈土的音樂...
這一次自己也來實現一波,做一個字符視頻出來。
主要用到的庫有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()
最后成功生成字符視頻。
這里懶得去添加原來的BGM,所以湊合著看吧。
據說瞇眼看,效果更佳。
/ 04 / 總結
相關的視頻以及代碼已上傳公眾號。
公眾號回復「字符」即可獲取。
最后在此給自己做的抖音視頻拉個票~
看過上一期送書推文的讀者應該知道,就是那個抖音視頻大賽。
大家要是有興趣也可以去參加,具體的見上條送書推文。
其中文末的視頻是我做的,而且我也去參加了,能不能拿大獎就靠大家了。
公眾號「數據森麟」的作者也參加了,了解這個公眾號的讀者,也可以去一睹大佬的真容,幫忙點贊,哈哈。
對于就開過一次贊賞的我而言,大家的抖音點贊就是對我最大的贊賞。
晚上的時候,還找了幾個問過我問題的讀者,幫忙點贊,大家也挺配合的。
其中有個小妹妹,手機上沒抖音,還立馬去下了一個,來幫我點贊。
心中有一種莫名的感動,感謝大家的支持。
具體的見上圖,就是那個藍色的模糊的視頻,不過就視頻的效果而言,應該堪稱大片。
手機上有抖音的就幫忙點個贊,沒抖音的就算啦。
畢竟少刷抖音,多看書。這句話,一點毛病也沒有。
萬水千山總是情,點個「好看」行不行。
--------------------- End ---------------------
往期精彩文章推薦:
【推薦】一個網站,解決你的論文下載、論文查重還有...
手把手教你抓取微博火鍋信息Top3——火鍋只能點三樣
手把手教你用Fiddler+MongoDB抓取貓眼APP短評
Python大佬抓取房價信息帶你開展多維度分析深圳房租
Python數據可視化:2018年電影分析
看完本文有收獲?請轉發分享給更多的人
IT共享之家
入群請在微信后臺回復【學習】