介紹

字符視頻就是畫面全部由字符組成的,那就先來看看效果:

原視頻如下:

那麼用代碼怎麼實現的呢?下面用python實現,話不多說,直接上乾貨。

本文福利:私信回覆【PDF】可獲取Python電子書一套

代碼實現詳解

其實總體思路分爲3個步驟:

1.將原視頻分割成若干個圖片以及分離出音頻

2.將每張圖片轉爲字符畫圖片(重點部分)

3.將若干個字符畫圖片和音頻合併成新的視頻(字符視頻)

將原視頻分割成若干個圖片以及分離出音頻

這個過程我們可以用python調用ffmpeg工具進行切割,ffmpeg是專門處理音視頻的工具庫。可以在ffmpeg官網下載可執行文件放在程序的當前目錄

分離音頻命令爲:

分割視頻成若干圖片的命令爲:

將分割出來的圖片和音頻臨時存儲起來,爲了後面若干圖片轉字符圖片效率及速度有所提高,還需將分割後的圖片轉爲縮略圖,就是改變圖片的尺寸

這裏使用python的PIL圖形處理庫來進行縮略圖轉化,同樣將縮略圖臨時存儲起來

將每張圖片轉爲字符畫圖片

如何將一張圖片轉爲字符形式呢?其實很簡單,分3步:

1.將圖片轉爲灰度圖

2.將灰度圖的每個像素點替換爲相應的字符

3.將所有替換後的字符畫成一張字符圖片

1.將圖片轉爲灰度圖

灰度圖,Gray Scale Image 或是Grey Scale Image,又稱灰階圖。把白色與黑色之間按對數關係分爲若干等級,稱爲灰度。灰度分爲256階

公式爲:Gray = R0.299 + G0.587 + B*0.114

同樣在python中可以用PIL庫直接轉灰度:

2.將灰度圖的每個像素點替換爲相應的字符

這裏如何替換呢?可以根據灰階值來替換爲我們自己設定的字符,例如:

symbols = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")

從上面列表可以看到:越靠前的越密集,越往後越稀疏,於是我們根據灰階值的大小按比例取列表中的字符,灰階值越大,取越靠後的字符,這樣圖片輪廓才能更好的清晰顯示

爲了是轉化後的字符圖片看起來不密集以及提高轉化時間,我這裏將每間隔1個像素來替換字符,初始還要指定圖片的邊框及尺寸,這些參數可以自行調整,具體展示如下代碼:

3.將所有替換後的字符畫成一張字符圖片

這步只需調用PIL庫的save方法,如上面代碼最後一行。

同樣,我們將轉化後的字符圖片臨時保存起來。

至此第2大步完成,即:將一張圖片轉爲字符圖片完成

將若干個字符畫圖片和音頻合併成新的視頻(字符視頻)

這裏也是使用ffmpeg工具進行合成,命令爲:

ffmpeg -threads 2 -start_number 000001 -r 24 -i 路徑名/%06d.jpeg -i temp.mp3 -vcodec mpeg4 生成的文件名

這一步完成後,字符視頻已經生成了。最後還需刪除一些臨時的文件及文件夾。

完整代碼展示

學會了嗎?簡單嗎?

把自己當做是生活的鏡頭,在生活中感悟記錄的魅力。

查看原文 >>
相關文章