python+ffmpeg讓字符跳動(dòng)起來(lái)

項(xiàng)目環(huán)境

語(yǔ)言:Python3
編輯器:Pycharm
導(dǎo)包:PIL、numpy
安裝軟件:FFmpeg

安裝軟件

1.下載ffmpeg,這里只說(shuō)Windows下的方式,首先去官網(wǎng),下載Windows版本的安裝包
ffmpeg.png

2.下載完成后,解壓,然后找到目錄下的bin文件夾,將該目錄配置到環(huán)境變量中
解壓目錄.png

3.驗(yàn)證是否安裝配置成功,打開cmd,輸入ffmpeg -version,出現(xiàn)如下界面則配置成功
sucess.png

程序思路

1.把視頻轉(zhuǎn)換為圖片
2.把圖片轉(zhuǎn)為編碼,存成txt文件
3.“播放”這些txt文件

視頻轉(zhuǎn)圖片

get_image(video_path, image_path),兩個(gè)參數(shù)就是你的視頻路徑和存放圖片的路徑。然后os.system()那句話就是讓你的Windows在cmd里面執(zhí)行里面那句話,-i 后面需要指定輸入的文件名。-f 指定格式(音頻或視頻格式)。-vframes 設(shè)置轉(zhuǎn)換多少楨(frame)的視頻。-ss 從指定的時(shí)間(s)截圖。

def getImage(video_path, image_path):
    img_count = 1
    crop_time = 0.0
    while crop_time <= 15.0:#轉(zhuǎn)化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('視頻轉(zhuǎn)化完成?。?!')

在cmd命令行中運(yùn)行此函數(shù),查看對(duì)應(yīng)文件夾是否有圖片生成。

圖片轉(zhuǎn)txt

def image_to_txt(image_path, txt_path):
    # 這里使用到PIL庫(kù)convert函數(shù),將RGB圖片轉(zhuǎn)化為灰度圖,參數(shù)'L'代表轉(zhuǎn)化為灰度圖
    im = Image.open(image_path).convert('L')
    charWidth = 100
    # 這個(gè)是設(shè)置你后面在cmd里面顯示內(nèi)容的窗口大小,請(qǐng)根據(jù)自己的情況,適當(dāng)調(diào)整值
    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,也就是偏白的,就寫一個(gè)字符 '1'
                f.write('1')
            else:
                f.write(' ')
        f.write('\n')
    f.close() 
def getTxt(image_path, txt_path):#調(diào)用上面的函數(shù)image_to_txt
    img_count = 1# 一張圖對(duì)應(yīng)一個(gè)txt文件,所以每遍歷一張圖,該值加一

    while img_count <= len(os.listdir(image_path)):
        #os.listdir(image_path)# 返回所有圖片名稱,是個(gè)字符串列表
        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

播放輸出

通過(guò) os.system('cls') 控制屏幕的及時(shí)清除,以便及時(shí)顯示下一幀圖片的編碼。

if __name__ == '__main__':
        video_dir_path = r'D:\dance\dance.mp4' + '\\'#存儲(chǔ)視頻文件的路徑
    txt_dir_path = r'D:\dance\txt' + '\\'#存儲(chǔ)txt文件的路徑
    img_dir_path = r'D:\dance\images' + '\\'#存儲(chǔ)圖片的路徑
        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里面顯示文件內(nèi)容
        txt_count += 1
        os.system('cls')

運(yùn)行

此程序由三個(gè)文件組成,如下圖。建立相對(duì)應(yīng)的目錄,提前下好視頻文件,放到對(duì)應(yīng)的目錄,打開cmd窗口,運(yùn)行run.py,執(zhí)行時(shí)間稍長(zhǎng),等待片刻。
project.png
image.png
txt.png

效果截圖.png

更多內(nèi)容請(qǐng)關(guān)注公眾號(hào)

元大頭.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,210評(píng)論 3 119
  • 媽媽們最擔(dān)心的就是寶寶的健康和發(fā)育 而益生菌可以保護(hù)寶寶腸道健康 排出對(duì)寶寶身體有害的細(xì)菌 DHA能夠促進(jìn)寶寶的大...
    嘟嘟萌萌閱讀 272評(píng)論 0 0
  • 大家在做滾動(dòng)廣告的時(shí)候,如果遇到第一張圖片向下偏移的話,在你創(chuàng)建滾動(dòng)視圖的Viewcontroller里面加上se...
    香蕉你個(gè)菠蘿閱讀 173評(píng)論 0 0
  • 記不住是從什么時(shí)候才開始注意你的,只記得那是一個(gè)午后,吃完午飯的我,無(wú)聊的刷著微信。不知道怎么想的,就去看了你的朋...
    子羽空靈閱讀 360評(píng)論 0 0

友情鏈接更多精彩內(nèi)容