超不清视频播放器-用Python将视频转成字符
今天分享的這段代碼,看起來沒啥實際用處,而且有些反潮流,因為現如今大家看視頻都追求更高分辨率的超清畫質,而我們這個,是 一個“超不清”的視頻播放器 :
在控制臺里播放視頻,用字符來表示畫面
不過我覺得它至少可以有三個作用:1.用來 練習視頻和圖像處理 的編程開發;2. 在沒有圖形界面的服務器上播放視頻 (雖然效果不咋地);3.作為一種獨特的 藝術風格化 處理
程序的原理其實很簡單,關鍵是你要理解 計算機中一張圖像的組成:一堆像素點。 我們平常說的 1920*1080 之類的分辨率,也就是指這個像素點的多少。我們想做成字符畫,也就是考慮如何用不同的字符來表示一個像素。
通常 一個像素點由3個0~255的值表示 ,分別表示 紅、綠、藍三種顏色值 ,值越大表示顏色越深。但字符畫是沒有顏色的,所以需要將圖像 轉成灰度圖 ,這樣就可以跟一組從深到淺的字符形成一種對應關系。比如深的點就是 @,淺色的點就是 .。
一幅圖像全部轉成字符序列后,就可以直接在控制臺輸出了。對于一個視頻來說,只需要將每一幀都轉換后輸出,并按照一定的時間間隔清屏、輸出下一幀,即可達到我們的需要的效果。
轉換后的效果:
代碼:
# coding: utf8 import cv2 as cv import os import time # 替換字符列表 ascii_char = list(r"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") char_len = len(ascii_char) # 加載視頻 cap = cv.VideoCapture('video.mp4') while True:# 讀取視頻每一幀hasFrame, frame = cap.read()if not hasFrame:break# 視頻長寬width = frame.shape[0]height = frame.shape[1]# 轉灰度圖img_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 縮小圖片并調整長寬比img_resize = cv.resize(img_gray, (int(width / 10), int(height / 10)))text = ''# 遍歷圖片中的像素for row in img_resize:for pixel in row:# 根據像素值,選取對應的字符text += ascii_char[int(pixel / 256 * char_len)]text += '\n'# 清屏os.system('cls') # mac是'clear'# 輸出生成的字符方陣print(text)# 適當暫停一下time.sleep(0.03)代碼不長,稍微解釋下其中幾處:
最后請各位欣賞最終的視頻效果:
《極樂凈土》字符版 https://www.zhihu.com/video/1063899647084568576
文中完整代碼已上傳,包括 轉單張圖片 和 轉視頻 兩份代碼。
獲取地址請在公眾號“ Crossin的編程教室 ”里回復關鍵字 播放器
════
其他文章及回答:
如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺
歡迎搜索及關注公眾號: Crossin的編程教室
總結
以上是生活随笔為你收集整理的超不清视频播放器-用Python将视频转成字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zabbix的架构配置选项
- 下一篇: ES6中的Promise使用方法与总结