#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;

my ($input, $copy, $vbitrate, $abitrate, $fullscreen, $print);
my ($title, $timestamp, $cmdline);

Getopt::Long::Configure('bundling');
GetOptions('i|input=s' => \$input
          ,'c|copy' => \$copy
          ,'v|vbitrate=i' => \$vbitrate
          ,'a|abitrate=i' => \$abitrate
          ,'f|fullscreen' => \$fullscreen
          ,'p|print' => \$print);

if (!defined $input)
{
    $0 =~ s#.*/##;
    print <<EOD
iPhone video converter script
Usage: $0 -i <inputfile> -c | -v <vbitrate> -a <abitrate> -f -s -p

Arguments:
   -i     Input video file
   -c     Copy bitrate and screen aspect ratio
   -v     Bitrate of video in kbps (default=192, overrides -c)
   -a     Bitrate of audio in kbps (default=64, overrides -c)
   -f     Force output to 4:3 (e.g. for 5:4 PAL input)
   -p     Indicate if commands should be printed (default=disabled)

You can also use these longer command line parameters:
  --input, --copy, --vbitrate, --abitrate, --fullscreen, --print
EOD
;
    exit;
}

if ($copy)
{
    my $info = `avconv -i "$input" 2>&1`;
    $abitrate = $1 if !defined $abitrate && $info =~ m#Stream.*?Audio.*?(\d+) kb/s#i;
    $vbitrate = $1 - $abitrate if !defined $vbitrate && $info =~ m#Duration.*?bitrate: (\d+) kb/s#i;
    $vbitrate /= 1.5 if $info !~ m#Stream.*?Video.*?h264#i; # h264 does a good job, bitrate can be lower
}

$vbitrate   = 512 if !defined $vbitrate;
$abitrate   = 128 if !defined $abitrate;
$fullscreen =   0 if !defined $fullscreen;
$print      =   0 if !defined $print;

($title = $input) =~ s#^(.*/)?(.*?)\.\w{3,5}$#$2#; # comment
my ($sec,$min,$hour, $day,$month,$year) = localtime(time);
$month++; $year += 1900;
$timestamp = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $month, $day, $hour, $min, $sec);

# Build avconv command line
$cmdline  = "nice -n 19 avconv -threads 2 -i \"$input\" -metadata creation_time=\"$timestamp\" ";
$cmdline .= "-vcodec libx264 -vf scale=1136:474 ";
$cmdline .= "-b ${vbitrate}k ";
# Put pixel ratio here if necessary
$cmdline .= "-r 25 ";
$cmdline .= "-acodec aac ";
$title =~ s#[^\w\d \-]##g;
$cmdline .= "-f mp4 \"$title.mp4\"";

if ($print)
{ print $cmdline, "\n"; }
else
{ system($cmdline); }
