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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值