Command Line

#!/usr/bin/perl -w
##==========================================================================
##
##  Copyright (c) On2 Technologies Inc. All Rights Reserved.
##
##--------------------------------------------------------------------------
##
##  File:        $Workfile$
##               $Revision$
##
##  Last Update: $DateUTC$
##
##--------------------------------------------------------------------------
##
use Win32::OLE;
## extract constants from the type lib
use Win32::OLE::Const 'On2.FlixEngine Type Library';
use Win32::OLE::Variant;

sub print_encoder_status()
{
    print "\nEncoder Status\n";

    $res= $flix->getEncoderState();
    print " flix->getEncoderState: $res\n";

    my $flixerr= Variant(VT_I4|VT_BYREF,0);
    my $syserr= Variant(VT_I4|VT_BYREF,0);
    $flix->errno_($flixerr,$syserr);
    printf(" flix->errno_: flixerrno:%d syserrno:%d\n",$flixerr,$syserr);
}

sub checkhr($)
{
    if(Win32::OLE->LastError) {
        warn "$_[0] failed. hr= ".Win32::OLE->LastError;
        print_encoder_status();
        exit 1;
    }
}

##
## retrieve the main engine interface, IFlix
##
$flix= Win32::OLE->new("On2.FlixEngine") or
    die("Error loading Flix Engine COM: $!, ".Win32::OLE->LastError);

##enable logging, 0=none(disable) 1=info 2=error(asserts) 3=debug 4=heavy
##CONOUT$ can be used as the log file name to send output to the console
#$flix->setLogLevel(3); checkhr('flix->setLogLevel');
#$flix->setLogPath("\\cli_encode.pl.log"); checkhr('flix->setLogPath');

##
## print some library information
##
print "Flix Engine COM library. Flix Engine v".$flix->version().
      " COM v".$flix->com_version()."\n";
print $flix->copyright()."\n\n";

if(@ARGV<2) {
    die("usage: cli_encode.pl <infile> <outfile>\n");
}

##
## set the source file
##
print "Input File  : $ARGV[0]\n";
$flix->setInputFile($ARGV[0]); checkhr('flix->setInputFile($ARGV[0])');

##
## retrieve the video options interface, IVideoOptions
##
$vidopts= $flix->videoOptions(); checkhr('flix->videoOptions()');

##
## print input file information
##
$srcduration= $flix->getSourceDuration(); checkhr('flix->getSourceDuration()');
$srcw= $vidopts->getSourceWidth(); checkhr('vidopts->getSourceWidth()');
$srch= $vidopts->getSourceHeight(); checkhr('vidopts->getSourceHeight()');
print <<EOT;
              Width:     $srcw
              Height:    $srch
              Duration:  ${srcduration}ms
EOT

##
## set the destination file
##
print "Output File : $ARGV[1]\n";
$flix->setOutputFile($ARGV[1]); checkhr('flix->setOutputFile($ARGV[1]');

##
## Options may be set and codecs/filters/muxers may be added prior to encode()
##

##Add the scale filter
#$filter= $flix->addFilter($flix->FE2_FILTER_SCALE);
#  checkhr('flix->addFilter(FE2_FILTER_SCALE)');
#
#$filter->setParam($flix->FE2_SCALE_WIDTH, 240);
#  checkhr('flix->setParam(FE2_SCALE_WIDTH,240)');
#$filter->setParam($flix->FE2_SCALE_HEIGHT,160);
#  checkhr('flix->setParam(FE2_SCALE_HEIGHT,160)');

##Add the vp6 codec. Though it is the default, you must add it in order
##to modify its settings
#$codec= $flix->addCodec($flix->FE2_CODEC_VP6);
#  checkhr('flix->addCodec(FE2_CODEC_VP6)');
#
#$codec->setParam($flix->FE2_VP6_RC_MODE,VBR_1PASSControl);
#  checkhr('codec->setParam(FE2_VP6_RC_MODE,VBR_1PASSControl)');

##Use the FLV muxer (default)
#$muxer= $flix->addMuxer($flix->FE2_MUXER_FLV);
#  checkhr('flix->addMuxer(FE2_MUXER_FLV)');

##
## start the encode
##
$flix->encode(); checkhr('flix->encode()');

##
## retrieve the encoding status interface, IEncodingStatus
##
$encstatus= $flix->encodingStatus(); checkhr('flix->encodingStatus()');

print "\n";
$| = 1; #auto flush
my $ier;
do {
    sleep(1);
    $ier = $flix->isEncoderRunning();
    print "\rEncoding...".$encstatus->percentComplete()."%  ";
} while($ier);

print "Done!\n";
print_encoder_status();

##cleanup
Win32::OLE->Uninitialize();


On2 Technologies, Inc Flix Engine Windows documentation, generated on Tue Nov 2 15:38:06 2010 by doxygen 1.6.1