1. 程式人生 > >寫一個python指令碼處理提取視訊幀的問題

寫一個python指令碼處理提取視訊幀的問題

為啥要寫這個呢?之前已經給了一個shell指令碼處理這個問題。
我想最主要的是我跑完指令碼後輸出了一句

video:20789kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

不清楚這是不是報錯,但是記錄一下

# -*- coding: utf-8 -*-
import os, sys
import datetime
# 所有視訊按每秒14幀提取
# 所有資料放在DATASET_ROOT下,每一類放在一個資料夾
# 提取的幀放在OUTPUT_ROOT/frames下,每一類在一個資料夾,每一個視訊提取的幀在以視訊命令的資料夾下
DATASET_ROOT='/home/pikachu/Desktop/dataset/' OUTPUT_ROOT='/home/pikachu/Desktop/' # 提取幀的命令 def get_cmd(file, frames = 14): # 獲取最短的檔名 basename = os.path.basename(file) output_path = OUTPUT_ROOT+'frames/'+file input_path = DATASET_ROOT+file if not os.path.exists(output_path): os.makedirs(output_path) cmd='ffmpeg -i '
+input_path+' -r '+str(frames)+' '+output_path+'/'+basename+'.%4d.jpg > /dev/null' return cmd starttime = datetime.datetime.now() # 遍歷DATASET_ROOT dirs = os.listdir(DATASET_ROOT) for dir in dirs: for file in os.listdir(DATASET_ROOT+'/'+dir): # 如果不是.mp4字尾,忽略 if not file.endswith('mp4'
): print('ignore ',file) else: # 提取幀 cmd = get_cmd(dir+'/'+file) print(cmd) os.system(cmd) endtime = datetime.datetime.now() print((endtime-starttime).seconds)