Advertisement
Guest User

Untitled

a guest
Nov 8th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.82 KB | None | 0 0
  1. class ffprobe():
  2.    
  3.     def __init__(self,source,timeout=None,tcp=False):
  4.         if timeout:
  5.             if tcp:
  6.                 com =['timeout',str(timeout),'ffprobe', '-v', 'quiet', '-rtsp_transport', 'tcp',  '-print_format', 'json', '-show_format', '-show_streams', source]
  7.             else:
  8.                 com = ['timeout',str(timeout),'ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', source]
  9.         else:
  10.             if tcp:
  11.                 com =['ffprobe', '-v', 'quiet', '-rtsp_transport', 'tcp',  '-print_format', 'json', '-show_format', '-show_streams', source]
  12.             else:
  13.                 com = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', source]
  14.  
  15.         out,err,rc = execute(com)
  16.  
  17.         try:
  18.             self.metadata = json.loads(out)
  19.         except:
  20.             self.metadata = None
  21.  
  22.         self.rc = rc
  23.         self.video_streams = []
  24.         self.audio_streams = []
  25.         self.format = None
  26.         if self.is_sane():
  27.             for stream in self.metadata['streams']:
  28.                 if stream['codec_type'] == 'video':
  29.                     self.video_streams.append(stream)
  30.                 elif stream['codec_type'] == 'audio':
  31.                     self.audio_streams.append(stream)
  32.            
  33.             self.format = self.metadata['format']
  34.  
  35.     def is_sane(self):
  36.         if not self.metadata or  self.rc != 0 or len(self.metadata['streams'])<1:
  37.             return False
  38.         else:
  39.             return True
  40.    
  41.     def get_resolution(self,num_video_stream = 0):
  42.         if self.is_sane() and len(self.video_streams) >= num_video_stream:
  43.             w = self.video_streams[num_video_stream]['width']
  44.             h = self.video_streams[num_video_stream]['height']      
  45.             return w,h
  46.         else:
  47.             return None
  48.  
  49.     def get_bitrate(self,codec='video',num_stream=0):
  50.         stream = None
  51.         if codec == 'video':
  52.             if len(self.video_streams) > num_stream:
  53.                 stream = self.video_streams[num_stream]
  54.         elif codec == 'audio':
  55.             if len(self.audio_streams) > num_stream:
  56.                 stream = self.audio_streams[num_stream]
  57.  
  58.         if stream and 'bit_rate' in stream.keys():
  59.             return int(stream['bit_rate'])/1024
  60.         else:
  61.             return None
  62.    
  63.    
  64.     def get_video_codec(self,num_stream=0):
  65.         stream = None
  66.         if len(self.video_streams) > num_stream:
  67.             stream = self.video_streams[num_stream]
  68.  
  69.         if stream and 'codec_name' in stream.keys():
  70.             return stream['codec_name']
  71.         else:
  72.             return None
  73.    
  74.     def get_audio_codec(self,num_stream=0):
  75.         stream = None
  76.         if len(self.audio_streams) > num_stream:
  77.             stream = self.audio_streams[num_stream]
  78.  
  79.         if stream and 'codec_name' in stream.keys():
  80.             return stream['codec_name']
  81.         else:
  82.             return None
  83.            
  84.    
  85.     def get_format_name(self):
  86.         if self.format and 'format_name' in self.format.keys():
  87.             return self.format['format_name']
  88.         else:
  89.             return None
  90.    
  91.    
  92.     def get_duration(self):
  93.         if self.format and 'duration' in self.format.keys():
  94.             return float(self.format['duration'])
  95.            
  96.     def get_start_time(self):
  97.         if self.format and 'start_time' in self.format.keys():
  98.             return float(self.format['start_time'])
  99.    
  100.     def get_fps(self,num_stream=0):
  101.         if len(self.video_streams) > num_stream:
  102.             stream = self.video_streams[num_stream]
  103.  
  104.         if stream and 'nb_frames' in stream.keys() and 'duration' in self.format.keys():
  105.             return float(stream['nb_frames'])/float(self.format['duration'])
  106.         else:
  107.             return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement