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']
 
作者感言:重要是事情說三遍 路徑全英文,路徑全英文,路徑全英文!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM