I am trying to grab the ffprobe values from the video file into a variable that I can compare against others or move the value into a database. The question I have; Is there a better way of doing it than below?
I don't like the multiple if/elif/line.startswith statements and I am not sure of split is the best way of getting the ffprobe values?
#!/usr/bin/python import os, sys, subprocess, shlex, re, fnmatch from subprocess import call videoDrop_dir="/mnt/VoigtKampff/Temp/_Jonatha/test_drop" for r,d,f in os.walk(videoDrop_dir): for files in f: print "Files: %s" % files if files.startswith(('._', '.')): print "This file: %s is not valid" % files elif files.endswith(('.mov', '.mpg', '.mp4', '.wmv', '.mxf')): fpath = os.path.join(r, files) def probe_file(fpath): cmnd = ['ffprobe', '-show_format', '-show_streams', '-pretty', '-loglevel', 'quiet', fpath] p = subprocess.Popen(cmnd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print files out, err = p.communicate() print "===============================OUTPUT START: %s ===============================" % files print out for line in out.split('\n'): line = line.strip() if line.startswith('codec_name='): s = line codec_name = s.split('codec_name=', 1) print "Codec is: %s" % codec_name[1] codec_1 = codec_name[1] elif line.startswith('codec_type='): s = line codec_type = s.split('codec_type=', 1) print "Codec type is: %s" % codec_type[1] codec_type1 = codec_type[1] elif line.startswith('codec_long_name=', 1): s = line codec_long_name = s.split('codec_long_name=', 1) print "Codec long name: %s" % codec_long_name[1] codec_long_name = codec_long_name[1] elif line.startswith('format_long_name=', 1): s = line format_long_name = s.split('format_long_name=', 1) print "Format long name: %s" % format_long_name[1] format_long_name = format_long_name[1] elif line.startswith('width='): s = line width = s.split('width=', 1) print "Video pixel width is: %s" % width[1] p_width = width[1] elif line.startswith('height='): s = line height = s.split('height=', 1) print "Video pixel height is: %s" % height[1] p_height = height[1] elif line.startswith('bit_rate='): s = line bit_rate = s.split('bit_rate=', 1) print "Bit rate is: %s" % bit_rate[1] bit_rate1 = bit_rate[1] elif line.startswith('display_aspect_ratio=', 1): s = line display_aspect_ratio = s.split('display_aspect_ratio=', 1) print "Display aspect ratio: %s" % display_aspect_ratio[1] display_aspect_ratio1 = display_aspect_ratio[1] elif line.startswith('avg_frame_rate=', 1): s = line avg_frame_rate = s.split('avg_frame_rate=', 1) print "Average Frame Rate: %s" % avg_frame_rate[1] avg_frame_rate1 = avg_frame_rate[1] print "===============================OUTPUT FINISH: %s ===============================" % files if err: print "===============================ERROR: %s ===============================" % files print err probe_file(fpath) else: if not files.startswith(('.mov', '.mpg', '.mp4', '.wmv', '.mxf')): print "This file: %s is not a valid video file" % files