天天看點

python+ffmpeg讓字元跳動起來

項目環境

語言:Python3

編輯器:Pycharm

導包:PIL、numpy

安裝軟體:FFmpeg

安裝軟體

1.下載下傳ffmpeg,這裡隻說Windows下的方式,首先去官網,下載下傳Windows版本的安裝包

python+ffmpeg讓字元跳動起來

2.下載下傳完成後,解壓,然後找到目錄下的bin檔案夾,将該目錄配置到環境變量中

python+ffmpeg讓字元跳動起來

3.驗證是否安裝配置成功,打開cmd,輸入ffmpeg -version,出現如下界面則配置成功

python+ffmpeg讓字元跳動起來

程式思路

1.把視訊轉換為圖檔

2.把圖檔轉為編碼,存成txt檔案

3.“播放”這些txt檔案

視訊轉圖檔

get_image(video_path, image_path),兩個參數就是你的視訊路徑和存放圖檔的路徑。然後os.system()那句話就是讓你的Windows在cmd裡面執行裡面那句話,-i 後面需要指定輸入的檔案名。-f 指定格式(音頻或視訊格式)。-vframes 設定轉換多少桢(frame)的視訊。-ss 從指定的時間(s)截圖。

def getImage(video_path, image_path):
    img_count = 1
    crop_time = 0.0
    while crop_time <= 15.0:#轉化15s的視訊
        os.system('ffmpeg -i %s -f image2 -ss %s -vframes 1 %s.png'% (video_path, str(crop_time), video_path+ str(img_count)))
        img_count += 1
        print('Geting Image ' + str(img_count) + '.png' + ' from time ' + str(crop_time))
        crop_time += 0.1#每0.1秒截取一張照片
    print('視訊轉化完成!!!')
                

在cmd指令行中運作此函數,檢視對應檔案夾是否有圖檔生成。

圖檔轉txt

def image_to_txt(image_path, txt_path):
    # 這裡使用到PIL庫convert函數,将RGB圖檔轉化為灰階圖,參數'L'代表轉化為灰階圖
    im = Image.open(image_path).convert('L')
    charWidth = 100
    # 這個是設定你後面在cmd裡面顯示内容的視窗大小,請根據自己的情況,适當調整值
    im = im.resize((charWidth, charWidth // 2))
    target_width, target_height = im.size
    data = numpy.array(im)[:target_height, :target_width]
    f = open(txt_path, 'w',encoding='utf-8')
    for row in data:
        for pixel in row:
            if pixel > 127: # 如果灰階值大于127,也就是偏白的,就寫一個字元 '*'
                f.write('*')
            else:
                f.write(' ')
        f.write('\n')
    f.close() 
def getTxt(image_path, txt_path):#調用上面的函數image_to_txt
    img_count = 1# 一張圖對應一個txt檔案,是以每周遊一張圖,該值加一

    while img_count <= len(os.listdir(image_path)):
        #os.listdir(image_path)# 傳回所有圖檔名稱,是個字元串清單
        imageFile = image_path+ str(img_count) + '.png'
        txtFile = txt_path+ str(img_count) + '.txt'
        image_to_txt.image_to_txt(imageFile, txtFile)
        print('舞蹈加載中: ' + str(img_count) + '%')
        img_count += 1
                

播放輸出

通過 os.system(‘cls’) 控制螢幕的及時清除,以便及時顯示下一幀圖檔的編碼。

if __name__ == '__main__':
        video_dir_path = r'D:\dance\dance.mp4' + '\\'#存儲視訊檔案的路徑
	txt_dir_path = r'D:\dance\txt' + '\\'#存儲txt檔案的路徑
	img_dir_path = r'D:\dance\images' + '\\'#存儲圖檔的路徑
        getImage(video_dir_path, img_dir_path )
	getTxt(img_dir_path, txt_dir_path)
	run(txt_dir_path)

def run(txtPath):
    txt_count = 1
    while txt_count <= len(os.listdir(txtPath)):
        os.system('type ' + txtPath + str(txt_count) + '.txt')
        # 這裡type指令是Windows下的指令,type+檔案名,就可以在cmd裡面顯示檔案内容
        txt_count += 1
        os.system('cls')
                

運作

此程式由三個檔案組成,如下圖。建立相對應的目錄,提前下好視訊檔案,放到對應的目錄,打開cmd視窗,運作run.py,執行時間稍長,等待片刻。

項目結構

python+ffmpeg讓字元跳動起來

視訊轉圖檔

python+ffmpeg讓字元跳動起來

圖檔轉txt

python+ffmpeg讓字元跳動起來

效果截圖

python+ffmpeg讓字元跳動起來

更多内容歡迎大家關注

python+ffmpeg讓字元跳動起來