項(xiàng)目環(huán)境
語言:Python3
編輯器:Pycharm
導(dǎo)包:PIL踊兜、numpy
安裝軟件:FFmpeg
安裝軟件
1.下載ffmpeg度苔,這里只說Windows下的方式俊戳,首先去官網(wǎng)竣付,下載Windows版本的安裝包程序思路
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ù),查看對應(yīng)文件夾是否有圖片生成俱笛。
圖片轉(zhuǎn)txt
def image_to_txt(image_path, txt_path):
# 這里使用到PIL庫convert函數(shù)捆姜,將RGB圖片轉(zhuǎn)化為灰度圖,參數(shù)'L'代表轉(zhuǎn)化為灰度圖
im = Image.open(image_path).convert('L')
charWidth = 100
# 這個(gè)是設(shè)置你后面在cmd里面顯示內(nèi)容的窗口大小迎膜,請根據(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# 一張圖對應(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
播放輸出
通過 os.system('cls') 控制屏幕的及時(shí)清除店茶,以便及時(shí)顯示下一幀圖片的編碼。
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里面顯示文件內(nèi)容
txt_count += 1
os.system('cls')
運(yùn)行
此程序由三個(gè)文件組成轿腺,如下圖。建立相對應(yīng)的目錄丛楚,提前下好視頻文件族壳,放到對應(yīng)的目錄,打開cmd窗口趣些,運(yùn)行run.py仿荆,執(zhí)行時(shí)間稍長,等待片刻喧务。更多內(nèi)容請關(guān)注公眾號