Python3.6_x86通过FFpmeg获取视频或音频的时长和分辨率

前言

  前段时间公司在做流媒体服务,与许多厂家合作拿了许多视频过来,现在要对这些视频文件进行整理,通过特殊的编码排列,获取他们的时长以及分辨率,这里我遇到一个大坑,请往下面看。

 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']
 
作者感言:重要是事情说三遍 路径全英文,路径全英文,路径全英文!!!!!
原文地址:https://www.cnblogs.com/heweiblog/p/6955698.html