#!/usr/bin/python3 """ creategif.py to create awful gif animations from videos! :D -h help -i [--input] input file -o [--output] output file -v [--verbose] verbose level. Set it as "verbose" -s [--size] size of the video. Give the size of the longest dimension (default: 320) -d [--delay] delay in ms for each frame for the generated gif (default: 5) -r [--rate] the rate in which frames are extracted (default: 10 fps) """ import getopt import sys import subprocess from subprocess import call import lib.helpers as helpers __author__ = 'lanxu ' def main(argv): ffmpeg_available = helpers.is_exe("/usr/bin/ffmpeg") convert_available = helpers.is_exe("/usr/bin/convert") input_file = '' output_file = '' loglevel = 'error' size = '320' delay = '5' rate = '10' try: opts, args = getopt.getopt(argv,"hi:o:v:s:d:r:", ["input=","output=","verbose=", "size=", "delay=", "rate="]) except getopt.GetoptError: print('creategif.py -i -o ') sys.exit(1) for opt, arg in opts: if opt == '-h': print('creategif.py -i -o [-v]') sys.exit() elif opt in ("-v", "--verbose"): loglevel = 'verbose' elif opt in ("-i", "--input"): input_file = arg elif opt in ("-o", "--output"): output_file = arg elif opt in ("-s", "--size"): size = arg elif opt in ("-d", "--delay"): delay = arg elif opt in ("-r", "--rate"): rate = arg if not ffmpeg_available or not convert_available: print('ffmpeg or convert not installed') sys.exit(1) if output_file == "" or input_file == "": print('provide input and output files') sys.exit(1) if loglevel != "error": print('Input file is "'+input_file+'"') print('Output file is "'+output_file+'"') try: command_ffmpeg = ['ffmpeg', '-i', input_file, '-loglevel', loglevel, '-vf', 'scale='+size+':-1', '-r', rate, '-f', 'image2pipe', '-vcodec', 'ppm', '-'] command_convert = ['convert', '-delay', delay, '-loop', '0', '-layers', 'Optimize', '-matte', '+dither', '-alpha', 'remove', '-depth', '8', '-', output_file] ps = subprocess.Popen(command_ffmpeg, stdout=subprocess.PIPE) val = call(command_convert, stdin=ps.stdout) # ffmpeg returns 0 if success if val > 0: print('Encoding failed!') sys.exit(2) except: print('Encoding failed!') sys.exit(2) if loglevel != "error": print('Done.') if __name__ == "__main__": main(sys.argv[1:])