Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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