#!/usr/bin/python import os import re import sys import getopt from subprocess import call __author__ = 'lanxu ' def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) def run_command(command): try: return_value = call(command) except (RuntimeError, TypeError, NameError, OSError) as error: raise return return_value def main(argv): ffmpeg_available = is_exe("/usr/bin/ffmpeg") inputFile = '' outputFile = '' loglevel = 'error' try: opts, args = getopt.getopt(argv,"hi:o:v",["ifile=","ofile="]) except getopt.GetoptError: print('test.py -i -o ') sys.exit(1) for opt, arg in opts: if opt == '-h': print('encodeVP9.py -i -o [-v]') sys.exit() elif opt in ("-v", "--verbose"): loglevel = 'verbose' elif opt in ("-i", "--ifile"): inputFile = arg elif opt in ("-o", "--ofile"): outputFile = arg if ffmpeg_available: """ Settings from: http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide `VOD Recommended Settings` """ # Disable colors os.environ['AV_LOG_FORCE_NOCOLOR'] = '1' # Define commands command_pass1 = ['ffmpeg', '-i', inputFile, '-loglevel',loglevel,'-c:v', 'libvpx-vp9', '-pass', '1', '-b:v', '1000K', '-threads', '8', '-speed', '4', '-tile-columns', '6', '-frame-parallel', '1', '-auto-alt-ref', '1', '-lag-in-frames', '25', '-an', '-f', 'webm', '-y', '/dev/null'] command_pass2 = ['ffmpeg', '-i', inputFile, '-loglevel',loglevel,'-c:v', 'libvpx-vp9', '-pass', '2', '-b:v', '1000K', '-threads', '8', '-speed', '1', '-tile-columns', '6', '-frame-parallel', '1', '-auto-alt-ref', '1', '-lag-in-frames', '25', '-c:a', 'libopus', '-b:a', '64k', '-f', 'webm', outputFile] # Run commands print('Input file is "'+inputFile+'"') print('Output file is "'+outputFile+'"') print('Running pass 1...') try: val = run_command(command_pass1) # ffmpeg returns 0 if success if val > 0: print('Encoding failed') sys.exit(2) except: # TODO Remove temp files here print('Encoding failed!') sys.exit(2) print('Running pass 2..') try: run_command(command_pass2) # ffmpeg returns 0 if success if val > 0: print('Encoding failed') sys.exit(2) except: # TODO Remove temp files here (or backup pass 1 files for next run) print('Encoding failed!') sys.exit(2) print('Done.') if __name__ == "__main__": main(sys.argv[1:])