#!/usr/bin/perl
#
# Date          Who     Purpose
# ----------    ---     --------------------------------------------------------------------
# 12-16-2004    djb     Genesis
# 12-20-2004    djb     Added "erase", "mplex" and "dvd" arguments
# 01-03-2005    djb     Added support for AVI files too
#
# Arguments passed in.
# --------- ------ ---
#  mplex          Muliplex back into single stream
#  dvd            Use dvdauthor to make a DVD directory (Implies mplex)
#  erase          Erase non-deliverable files
#
# Purpose
# -------
# Transcode all mpeg and avi files in the current directory into 720x480 DVD ready files.

# Packages, etc
package Argv;           # Allow Command line arguments
use strict;             # Force declarations

# Variable Declarations
# -------- ------------
my $directoryHandle;                                                    # directory handle for list
my @directoryList;                                                      # list of directory files
my $fileName;                                                           # each file name
my $videoName;                                                          # the modified name of the video (Add extensions)
my $arg;                                                                # individual arguments passed to the program

# Variable defaults
my $mplex = "No";                                                       # Don't mplex the streams together
my $dvd   = "No";                                                       # Don't make the DVD file system
my $erase = "No";                                                       # Don't erase temporary files when able

my @delFiles;                                                           # List of files to delete after no longer necessary

foreach $arg (@ARGV) {                                                  # Parse the arguments passed into the program
  if ($arg =~ /dvd$/i) {
    $mplex = "Yes";
    $dvd = "Yes";
  }
  if ($arg =~ /mplex$/i) {
    $mplex = "Yes";
  }
  if ($arg =~ /erase$/) {
    $erase = "Yes";
  } 
}

opendir($directoryHandle, ".");
@directoryList = readdir($directoryHandle);
closedir($directoryHandle);

foreach $fileName (@directoryList) {
  if ($fileName =~ /\.mpg$|\.mpeg$|\.avi$/i) {				# if the filename ends with .mpg or .mpeg
    $videoName = $fileName;                                             #   set the videoName and
    $videoName =~ s/\.mpg$|\.mpeg|\.avi//i;				#   strip the ending .mpg or .mpeg and
    $videoName = "${videoName}-DVD";                                    #   concatenate "-DVD" to it

    `date > \"${videoName}.log\"`;
#    `transcode -i "$fileName" -y mpeg2enc,mp2enc -F 8 -V -z 720x480,fast -E 44100 -b 128 -o "${videoName}-DVD" >> "${videoName}.log"`;
    `transcode -i \"${fileName}\" -y ffmpeg --export_prof dvd-ntsc --export_asr 2 -o \"${videoName}\" -D0 -E 48000 -b 224 -s2 -m \"${videoName}.ac3\" -J modfps --export_fps 29.97 >> \"${videoName}.log\"`;
    if ($mplex eq "Yes") {
      `mplex -f 8 -o \"$videoName.mpg\" \"$videoName.m2v\" \"${videoName}.ac3\" >> \"${videoName}.log\"`;
      if ($erase eq "Yes") {                                            # Delete temp files?
        @delFiles = ("$videoName.m2v", "$videoName.ac3");
        unlink (@delFiles); 
      }
      if ($dvd eq "Yes") {
        `dvdauthor -o \"$videoName.DIR\" \"$videoName.mpg\"`;
        if ($erase eq "Yes") {                                          # Delete temp files?
          @delFiles = ("$videoName.mpg");
          unlink (@delFiles);
        }
        `dvdauthor -T -o \"$videoName.DIR\"`;
      }
    `date >> \"${videoName}.log\"`;
    }
  }
}
