前言
前段時間公司在做流媒體服務,與許多廠家合作拿了許多視頻過來,現在要對這些視頻文件進行整理,通過特殊的編碼排列,獲取他們的時長以及分辨率,這里我遇到一個大坑,請往下面看。
1 # -*- coding: utf-8 -*- 2 import os 3 import sys 4 import shutil 5 import subprocess 6 import json 7 def getLength(filename): 8 command = ["ffprobe.exe","-loglevel","quiet","-print_format","json","-show_format","-show_streams","-i",filename] 9 result = subprocess.Popen(command,shell=True,stdout = subprocess.PIPE, stderr = subprocess.STDOUT) 10 out = result.stdout.read() 11 #print(str(out)) 12 temp = str(out.decode('utf-8')) 13 try: 14 data = json.loads(temp)['streams'][1]['width'] 15 except: 16 data = json.loads(temp)['streams'][0]['width'] 17 return data 18 19 def getLenTime(filename): 20 command = ["ffprobe.exe","-loglevel","quiet","-print_format","json","-show_format","-show_streams","-i",filename] 21 result = subprocess.Popen(command,shell=True,stdout = subprocess.PIPE, stderr = subprocess.STDOUT) 22 out = result.stdout.read() 23 #print(str(out)) 24 temp = str(out.decode('utf-8')) 25 data = json.loads(temp)["format"]['duration'] 26 return data
只需要傳入文件的完整路徑就可以獲取到分辨率以及播放時長。
本次使用ffpmeg發現,使用的python3.6 ,32位和64位通過 subprocess.Popen 獲取到的值是不一樣的,導致后面的方法也稍微不一樣,如果你是32位的,使用我上面代碼無法獲取
out = result.stdout
data = json.loads(out)["format"]['duration']
作者感言:重要是事情說三遍 路徑全英文,路徑全英文,路徑全英文!!!!!