Welcome to Etherpad!
This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!
Get involved with Etherpad at
http://etherpad.org#
! /usr/bin/env python
# -*- coding: utf-8 -*-
from main.settings import db
import random
from moviepy.editor import VideoFileClip, concatenate, cvsecs
from pattern.en import tokenize, parse
from argparse import ArgumentParser
# set arguments for the script
p = ArgumentParser("This generator creates a videofile based on the structure of the input sentence.")
p.add_argument("--text", default=None, help="the input text, a sentence, written in between quotes.")
args = p.parse_args()
if args.text == None:
args.text = "I eat pizza with a fork."
# Get entry in list where given key has given value
def findwhere (key, value, list):
for entry in list:
if entry[key] == value:
return entry
# Returns clip for given video file, from start time till end time
def get_clip (video, start, end, padding = .1):
return VideoFileClip(video).subclip(start - padding, end + padding)
# Returns all the sentences with the given word
def sentences_with(word):
return [sentence for sentence in db.sentences.find({'words.word': word})]
# selects one of the selected sentences
def random_sentence_with(word):
return random.choice(sentences_with(word))
# Returns all the words found
def get_words (word):
return [findwhere('word', word, sentence['words']) for sentence in sentences_with(word)]
# randoms one of the found words
def get_word(word, sentence):
return findwhere('word', word, sentence['words'])
# Returns a subclip for a word in the given sentence
def get_word_clip(word, sentence):
word = get_word(word, sentence)
return get_clip(sentence['filename'], word['start'], word['end'])
def random_word_clip(word):
return get_word_clip(word, random_sentence_with(word))
if __name__ == '__main__':
output = 'output/words-generated-video.mp4'
tokenizedSentence = tokenize(args.text)[0].split()
print args.text
print tokenizedSentence
clips = [random_word_clip(word) for word in tokenizedSentence] # excecute 'random_word_clip(word)' for every 'word' in 'sentence' + append it to the list 'clips'
final = concatenate(clips) # Concatenate given subclips into new VideoFileClip
final.to_videofile(output, fps=24) # Export generated clips into video