Example #1
0
    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])
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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