超不清视频播放器-用Python将视频转成字符
今天分享的這段代碼,看起來(lái)沒(méi)啥實(shí)際用處,而且有些反潮流,因?yàn)楝F(xiàn)如今大家看視頻都追求更高分辨率的超清畫(huà)質(zhì),而我們這個(gè),是 一個(gè)“超不清”的視頻播放器 :
在控制臺(tái)里播放視頻,用字符來(lái)表示畫(huà)面
不過(guò)我覺(jué)得它至少可以有三個(gè)作用:1.用來(lái) 練習(xí)視頻和圖像處理 的編程開(kāi)發(fā);2. 在沒(méi)有圖形界面的服務(wù)器上播放視頻 (雖然效果不咋地);3.作為一種獨(dú)特的 藝術(shù)風(fēng)格化 處理
程序的原理其實(shí)很簡(jiǎn)單,關(guān)鍵是你要理解 計(jì)算機(jī)中一張圖像的組成:一堆像素點(diǎn)。 我們平常說(shuō)的 1920*1080 之類的分辨率,也就是指這個(gè)像素點(diǎn)的多少。我們想做成字符畫(huà),也就是考慮如何用不同的字符來(lái)表示一個(gè)像素。
通常 一個(gè)像素點(diǎn)由3個(gè)0~255的值表示 ,分別表示 紅、綠、藍(lán)三種顏色值 ,值越大表示顏色越深。但字符畫(huà)是沒(méi)有顏色的,所以需要將圖像 轉(zhuǎn)成灰度圖 ,這樣就可以跟一組從深到淺的字符形成一種對(duì)應(yīng)關(guān)系。比如深的點(diǎn)就是 @,淺色的點(diǎn)就是 .。
一幅圖像全部轉(zhuǎn)成字符序列后,就可以直接在控制臺(tái)輸出了。對(duì)于一個(gè)視頻來(lái)說(shuō),只需要將每一幀都轉(zhuǎn)換后輸出,并按照一定的時(shí)間間隔清屏、輸出下一幀,即可達(dá)到我們的需要的效果。
轉(zhuǎn)換后的效果:
代碼:
# 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# 視頻長(zhǎng)寬width = frame.shape[0]height = frame.shape[1]# 轉(zhuǎn)灰度圖img_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 縮小圖片并調(diào)整長(zhǎng)寬比img_resize = cv.resize(img_gray, (int(width / 10), int(height / 10)))text = ''# 遍歷圖片中的像素for row in img_resize:for pixel in row:# 根據(jù)像素值,選取對(duì)應(yīng)的字符text += ascii_char[int(pixel / 256 * char_len)]text += '\n'# 清屏os.system('cls') # mac是'clear'# 輸出生成的字符方陣print(text)# 適當(dāng)暫停一下time.sleep(0.03)代碼不長(zhǎng),稍微解釋下其中幾處:
最后請(qǐng)各位欣賞最終的視頻效果:
《極樂(lè)凈土》字符版 https://www.zhihu.com/video/1063899647084568576
文中完整代碼已上傳,包括 轉(zhuǎn)單張圖片 和 轉(zhuǎn)視頻 兩份代碼。
獲取地址請(qǐng)?jiān)诠娞?hào)“ Crossin的編程教室 ”里回復(fù)關(guān)鍵字 播放器
════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問(wèn)答 | Python單詞表 | 人工智能 | 爬蟲(chóng) | 我用Python | requests | 計(jì)算機(jī)視覺(jué)
歡迎搜索及關(guān)注公眾號(hào): Crossin的編程教室
總結(jié)
以上是生活随笔為你收集整理的超不清视频播放器-用Python将视频转成字符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Zabbix的架构配置选项
- 下一篇: 第4章:介绍python对象类型/4.1