def preprocess(self, data): """ Processes popcorn JSON and builds a sane data model out of it @param data : The popcorn editor project json blob """ print 'Beginning pre-process...' for url, video in data['media'][0]['clipData'].iteritems(): print 'Downloading {0}.'.format(url) urllib.urlretrieve(url, video['title']) print 'Finished download!' print 'All videos downloaded.' events = [event for track in data['media'][0]['tracks'] for event in track['trackEvents']] for event in events: if event['type'] == 'skip' or event['type'] == 'loop': edit = TrackEdit(event['type'], event['popcornOptions']) edit.options['start_stamp'] = \ seconds_to_timecode(edit.options['start']) edit.options['end_stamp'] = \ seconds_to_timecode(edit.options['start']) edit.options['x_px'] = percent_to_px( edit.options['left'], self.size[0] ) edit.options['y_px'] = percent_to_px( edit.options['top'], self.size[1] ) self.track_edits.append(edit) if event['type'] == 'text' or event['type'] == 'image': item = TrackItem(event['type'], event['popcornOptions']) self.track_items.append(item) if event['type'] == 'sequencer': video = TrackVideo( event['type'], event['popcornOptions']['source'][0], event['popcornOptions'] ) self.track_videos.append(video) self.parse_duration() cfilter = r'color=c={0}:s={1}x{2}:d={3}'.format( self.background_color, self.size[0], self.size[1], self.duration ) call(['ffmpeg', '-filter_complex', cfilter, self.video_name])
def draw_videos(self): i = 0 for video in reversed(self.track_videos): overlay = NamedTemporaryFile( suffix='.avi', delete=self.delete ) # Removes all white spaces and non alphanumeric chars from title video.options['title'] = re.sub( '[^\w\.]', '', video.options['title'] ) + '.webm' # Trim the video if it needs to be if (video.options['from'] != 0 or video.options['end'] - video.options['from'] < video.options['duration']): self.editor.trim( video.options['title'], overlay.name, seconds_to_timecode(video.options['from']), seconds_to_timecode(video.options['duration']) ) else: overlay.name = video.options['title'] # Also scale the video down to size scaled_overlay = NamedTemporaryFile( suffix='.avi', delete=self.delete ) self.editor.scale_video( overlay.name, scaled_overlay.name, percent_to_px(video.options['width'], self.size[0]), percent_to_px(video.options['height'], self.size[1]), ) overlay.close() out = NamedTemporaryFile(suffix='.avi', delete=self.delete) self.overlay_videos(self.current_video.name, scaled_overlay.name, video.options, out.name) scaled_overlay.close() self.current_video = out i += 1
def draw_videos(self): i = 0 for video in reversed(self.track_videos): # Trim the video if it needs to be if (video.options['from'] == 0 or video.options['end'] - video.options['from'] < video.options['duration']): overlay = NamedTemporaryFile( suffix='.avi', delete=self.DELETE_VIDEOS ) self.editor.trim( video.options['title'].replace(' ', '-') + '.webm', overlay.name, seconds_to_timecode(video.options['from']), seconds_to_timecode(video.options['duration']) ) # Also scale the video down to size if not video.options['height'] == 100 or True: scaled_overlay = NamedTemporaryFile( suffix='.avi', delete=self.DELETE_VIDEOS ) self.editor.scale_video( overlay.name, scaled_overlay.name, percent_to_px(video.options['width'], self.size[0]), percent_to_px(video.options['height'], self.size[1]), ) overlay.close() else: scaled_overlay = overlay out = NamedTemporaryFile(suffix='.avi', delete=self.DELETE_VIDEOS) self.overlay_videos(self.current_video.name, scaled_overlay.name, video.options, out.name) scaled_overlay.close() self.current_video = out i += 1
def draw_videos(self): i = 0 for video in reversed(self.track_videos): overlay = NamedTemporaryFile(suffix='.avi', delete=self.delete) # Removes all white spaces and non alphanumeric chars from title video.options['title'] = re.sub('[^\w\.]', '', video.options['title']) + '.webm' # Trim the video if it needs to be if (video.options['from'] != 0 or video.options['end'] - video.options['from'] < video.options['duration']): self.editor.trim( video.options['title'], overlay.name, seconds_to_timecode(video.options['from']), seconds_to_timecode(video.options['duration'])) else: overlay.name = video.options['title'] # Also scale the video down to size scaled_overlay = NamedTemporaryFile(suffix='.avi', delete=self.delete) self.editor.scale_video( overlay.name, scaled_overlay.name, percent_to_px(video.options['width'], self.size[0]), percent_to_px(video.options['height'], self.size[1]), ) overlay.close() out = NamedTemporaryFile(suffix='.avi', delete=self.delete) self.overlay_videos(self.current_video.name, scaled_overlay.name, video.options, out.name) scaled_overlay.close() self.current_video = out i += 1
def draw_videos(self): i = 0 for video in self.track_videos: # Trim the video if it needs to be if (video.options['from'] == 0 or video.options['end'] - video.options['from'] < video.options['duration']): overlay = 'trimmed_' + str(i) + '.avi' self.editor.trim( video.options['title'], overlay, seconds_to_timecode(video.options['from']), seconds_to_timecode(video.options['duration']) ) # Also scale the video down to size if not video.options['height'] == 100 or True: scaled_overlay = 'scaled_' + str(i) + '.avi' self.editor.scale_video( overlay, scaled_overlay, percent_to_px(video.options['width'], self.size[0]), percent_to_px(video.options['height'], self.size[1]), ) else: scaled_overlay = overlay out = 'video_' + str(i) + '.avi' self.overlay_videos(self.video_name, scaled_overlay, video.options, out) self.video_name = out i += 1