def mediaCodec_getdur(self, input_file, logname): '''get output dur''' scan_result = mediaCodec_scan_param.mediaCodec_scan_param( mediabase.MEDIA_FFPROBE, input_file, 0, logname) if scan_result['error_code'] != 0: mediabase.addlog("scan input video [%s] error" % input_file, logname) out_dur = "NULL" return out_dur else: video_info = scan_result["data"] if video_info.has_key("Video"): video_dur = video_info["Video"]["0"]["duration"] else: mediabase.addlog("scan video no duration [%s] error" % input_file, logname) out_dur = "NULL" return out_dur if video_info.has_key("Audio"): audio_dur = video_info["Audio"]["0"]["duration"] else: mediabase.addlog("scan audio no duration [%s] error" % input_file, logname) out_dur = "NULL" return out_dur if abs(int(video_dur) - int(audio_dur))/1000 > int(video_dur)/1000/5: #video and audio len_diff big than 1/5 mediabase.addlog("scan video and audio diff len [%s] error" % input_file, logname) out_dur = "NULL" return out_dur scan_cmd = mediabase.MEDIA_FFMPEG + " -i %s 2>&1 | grep Duration" % ( input_file ) mediabase.addlog("run cmd:%s" % scan_cmd, logname) result = commands.getstatusoutput(scan_cmd) if result[0] != 0: mediabase.addlog( "call function error: %s " % scan_cmd, logname ) out_dur = "NULL" return out_dur log_line = result[1].splitlines() log_list = log_line[0].split() if "Duration" not in log_list[0]: out_dur = "NULL" return out_dur else: out_dur = log_list[1].strip(",") return out_dur
def mediaCodec_get_video_param(self, logname): '''scan input video''' ret = 0 scan_result = mediaCodec_scan_param.mediaCodec_scan_param( mediabase.MEDIA_FFPROBE, self.param["queuefile"], 0, logname) if scan_result['error_code'] != 0: mediabase.addlog("scan input video [%s] error" % self.param["queuefile"], logname) ret = 1 return ret else: video_info = scan_result["data"] if video_info.has_key("Video"): self.param["input_w"] = video_info["Video"]["0"]["width"] self.param["input_h"] = video_info["Video"]["0"]["height"] else: ret = 1 return ret return ret
def mediaCodec_encode_pic(self, logname): '''encode pic''' result_pic = {} result_pic["error_code"] = 0 #step1.1: get duration file_dur = 0 scan_result = mediaCodec_scan_param.mediaCodec_scan_param( mediabase.MEDIA_FFPROBE, self.param["queuefile"] , 0, logname) if scan_result['error_code'] != 0: mediabase.addlog("encode pic: scan input video [%s] error" % self.param["queuefile"], logname) result_pic["error_code"] = 1 return result_pic else: video_info = scan_result["data"] if video_info.has_key("duration"): file_dur = int(video_info["duration"]) / 1000 else: mediabase.addlog("encode pic:scan video no duration [%s] error" % self.param["queuefile"], logname) result_pic["error_code"] = 1 return result_pic #step1: cut time if len(self.param["pic_time"]) != 0: pic_time_list = self.param["pic_time"].split(";") else: mediabase.addlog("input pic time error[%s]!" % (self.param["pic_time"]), logname) result_pic["error_code"] = 1 return result_pic #step2: format if not valid use default jpg if self.param["pic_format"] != "1" and self.param["pic_format"] != "2": self.param["pic_format"] = "2" #step3: get default dimension pic_dimension = "480x320" if len(self.param["dimension"]) != 0: pic_dimension_list = self.param["dimension"].split("x") if len(pic_dimension_list) != 2 or self.param["dimension"].count('.') > 0: mediabase.addlog("input dimension error[%s]!" % ( self.param["dimension"] ), logname) result_pic["error_code"] = 1 return result_pic else: if pic_dimension_list[0].isdigit() and pic_dimension_list[1].isdigit(): pic_dimension = self.param["dimension"] else: mediabase.addlog("input dimension error[%s]!" % ( self.param["dimension"] ), logname) result_pic["error_code"] = 1 return result_pic pic_list = [] idx = -1 for i in range( 0, len(pic_time_list) ): if pic_time_list[i] == "" or pic_time_list[i].count('.') > 0 or not pic_time_list[i].isdigit(): continue if int(pic_time_list[i]) < 0 or int(pic_time_list[i]) > file_dur: continue idx = idx + 1 pic_elem = {} if self.param["pic_format"] == "1": pic_name = self.param["output_pic"] + str(idx) + ".png" else: pic_name = self.param["output_pic"] + str(idx) + ".jpg" cmd_str = "" cmd_str += mediabase.MEDIA_FFMPEG + " -ss %s -i %s " % (pic_time_list[i], self.param["queuefile"]) cmd_str += " -vframes 1 -f image2 -s %s -y %s " % ( pic_dimension, pic_name) cmd_str += " 2>>%s 1>&2" % ( self.param["tmp_log"] ) ret = mediabase.run_cmd( cmd_str, logname ) if ret != 0: mediabase.addlog("get pic error[%s]!" % ( pic_time_list[i] ), logname) result_pic["error_code"] = 1 return result_pic pic_elem["time"] = pic_time_list[i] pic_elem["pic"] = pic_name pic_list.append(pic_elem) result_pic["data"] = pic_list return result_pic