def __init__(self, path=None): if path: self.path = os.path.abspath(path) else: name = 'live_segmenter.exe' if WIN32 else 'live_segmenter' self.path = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), name) self.cmd_tmpl = string.Template(helper.shellquote(self.path)+" 10 $tmpDir $segmentPrefix mpegts $startSegment") if not helper.validate_exec(self.path): DISABLE_LIVE_TRANSCODE = True print "Live transcode disabled. Could not find segmenter at path: "+self.path
def __init__(self, path=None): if path: self.path = os.path.abspath(path) else: name = 'ffmpeg.exe' if WIN32 else 'ffmpeg' self.path = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), name) self.cmd_tmpl = string.Template(helper.shellquote(self.path)+" " "-ss $startTime " "-i \"$videoPath\" " "-vcodec libx264 -r 23.976 " "-b $bitrate -bt $bitrate -loglevel quiet " "-vf \"crop=iw:ih:0:0,scale=$frameWidth:$frameHeight\" -aspect \"$frameWidth:$frameHeight\" " "-acodec libmp3lame -ab 48k -ar 48000 -ac 2 -async 1 " "-bufsize 1024k -threads 4 -preset fast -tune grain " "-f mpegts - ") if not helper.validate_exec(self.path): DISABLE_LIVE_TRANSCODE = True print "Live transcode disabled. Could not find ffmpeg at path: "+self.path
def call_ffmpeg(self, **kwargs): self.killProcessing() cmd = self.transcoder.ffmpeg.cmd_tmpl.substitute( startTime=int(kwargs['start_segment'])*self.segment_duration, videoPath=self.videoPath, # FIXME last change monday 9:04 aM #duration=kwargs['num_segments']*self.segment_duration, frameWidth=self.frame_size[0], frameHeight=self.frame_size[1], bitrate=int(kwargs['bitrate'])*1000, ) segmenter_cmd = self.transcoder.segmenter.cmd_tmpl.substitute( tmpDir=helper.shellquote(self.transcoder.tmp_dir), # and this ughhh shellex? or what nib startSegment=kwargs['start_segment'], segmentPrefix=self.md5+"-"+kwargs['bitrate'], ) with open(os.devnull, 'w') as fp: self.current_ffmpeg_process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=fp, startupinfo=helper.noCmd()) self.current_segmenter_process = subprocess.Popen(shlex.split(segmenter_cmd), stdin=self.current_ffmpeg_process.stdout, stdout=fp, stderr=fp, startupinfo=helper.noCmd())