項目環境
語言:Python3
編輯器:Pycharm
導包:PIL、numpy
安裝軟體:FFmpeg
安裝軟體
1.下載下傳ffmpeg,這裡隻說Windows下的方式,首先去官網,下載下傳Windows版本的安裝包
2.下載下傳完成後,解壓,然後找到目錄下的bin檔案夾,将該目錄配置到環境變量中
3.驗證是否安裝配置成功,打開cmd,輸入ffmpeg -version,出現如下界面則配置成功
程式思路
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,執行時間稍長,等待片刻。
項目結構
視訊轉圖檔
圖檔轉txt
效果截圖
更多内容歡迎大家關注