寫一個python指令碼處理提取視訊幀的問題
阿新 • • 發佈:2019-02-08
為啥要寫這個呢?之前已經給了一個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)