一個有趣的Python案例:將抖音視頻轉換爲字符視頻,簡單一看就會
介紹
字符視頻就是畫面全部由字符組成的,那就先來看看效果:
原視頻如下:
那麼用代碼怎麼實現的呢?下面用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 生成的文件名
這一步完成後,字符視頻已經生成了。最後還需刪除一些臨時的文件及文件夾。
完整代碼展示
學會了嗎?簡單嗎?
把自己當做是生活的鏡頭,在生活中感悟記錄的魅力。
查看原文 >>