文/IT可達鴨
圖/IT可達鴨、網絡
前言
上一篇,我們分享了給圖片轉成代碼圖片的源碼,這次分享一個視頻轉代碼動圖的一個源碼,需要有圖像和動圖像的一些基本知識。
- 環境配置
python版本: 3.6.0
代碼編輯工具:pycharm
錄屏軟件、控制檯(win+r, cmd)
項目所需要的環境安裝包
<code>pip install opencv-python/<code>
第一步:導入相關的python包
<code># encoding:utf-8 import cv2 import os/<code>
cv2:是一個強大的圖像、視頻處理工具包。有興趣做圖像處理或視頻處理,可以稍微研究一下openCV。
os: 這裡使用它文件存儲和清屏功能。
第二步:全局變量
<code>ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ") char_len = len(ascii_char) show_height = 40 show_width = 80/<code>
ascii_chat 是像素值轉化的代碼列表,show_height 和show_width 分別是最終轉化動圖的高和寬。 這裡為了方便演示,就把它作為全局變量。如果是實際項目,就必須用配置文件或者從數據庫中讀取。
第三步:視頻處理
<code>def frame_process(video_path): vc = cv2.VideoCapture(video_path) # 加載一個視頻 if vc.isOpened(): # 判斷是否正常打開 rval, frame = vc.read() else: rval = False frame_count = 0 outputList = [] # 初始化輸出列表 while rval: # 循環讀取視頻幀 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 使用opencv轉化成灰度圖 gray = cv2.resize(gray, (show_width, show_height)) # resize灰度圖 text = "" for pixel_line in gray: for pixel in pixel_line: # 字符串拼接 text += ascii_char[int(pixel / 256 * char_len)] text += "\r\n" outputList.append(text) frame_count = frame_count + 1 if frame_count % 100 == 0: print("已處理" + str(frame_count) + "幀") rval, frame = vc.read() print("處理完畢") return outputList/<code>
視頻是由一幀幀圖片組成,有些視頻每秒有24幀圖片、有些12幀圖片,幀的數量取決於視頻的質量。這裡處理步驟是:
1 加載視頻
2 循環讀取每一幀圖片
3 對圖片進行大小重置、灰度轉化、字符轉換
4 結果保存在列表中
5 返回列表結果
第四步:打印結果
<code>def output(outputList): for frame in outputList: os.system("cls") # 清屏 print(frame) print() print()/<code>
os.system("cls"): 表示把控制檯所有信息清空。
模擬視頻播放,一幀一幀地打印所有的圖片。
第五步:主函數
<code>if __name__ == '__main__': # 在命令行中,運行效果更明顯 video_path = '跳舞.mp4' frame_list = frame_process(video_path) output(frame_list) print("OK")/<code>
隨意在抖音上下載一個小姐姐的跳舞視頻,作為函數的參數。
輸入輸出
打開控制檯(Win+R),輸入cmd,並進入到代碼所在目錄。運行命令: python 視頻轉代碼.py,再利用錄屏軟件錄製屏幕,導出動圖GIF。
結語
不知不覺,代碼庫又多了一塊磚。雖然代碼對於老程序員來說,這代碼 so easy, so simple。但是,對於新手而言,這就是一個非常好的練手小項目。不僅僅代碼量少,更重要的是容易上手。如果大家有疑問,歡迎下方評論。未來編程的路還很長,放下你手中的手機,跟我們一下寫代碼吧!
如果有疑問想獲取源碼,可以關注後,在後臺私信我,回覆:python代碼視頻。 我把源碼發你。持續關注"IT可達鴨" ,每天分享有趣Python源碼。如果覺得我的文章有意思,就順手點個贊吧。最後,感謝大家的閱讀,祝大家工作生活愉快!