All pastes #770514 Raw Edit

ccfreak2k

public text v1 · immutable
·published 2007-11-12 11:03 UTC
rendered paste body
##########################
# NES Encoder Script v1 #
##########################
#
# This script is governed by the provisions of the BSD license.
#
# Copyright (c) 2007, Andrew "ccfreak2k" Waters
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the script nor the names of its contributors may
#       be used to endorse or promote products derived from this software
#       without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# ABOUT:
#  Written by ccfreak2k
#  Based on settings provided in "Nes encoding.bat" by Phil
#
# PURPOSE:
#  The purpose of this script is to help automate the encoding process. It does a basic check to see if the encoding process failed somewhere and alerts the user.
#
# REQUIRES:
#  .\mencoder.exe
#  A font file.
#
# INPUT:
#  A logo video.
#  The recorded video.
#  A subtitles file.
#
# OUTPUT:
#  The encoded video.
#
# CAVEATS:
#  The script makes mencoder generate interim video files; used disk space from the initial input videos may TRIPLE, so make sure you have at least that much.
#
# TODO:
#  Maybe add some logging support so the user can log the process.
#  Maybe add an optional backup option to let the user backup the "video is encoding.avi" files (currently, if an error occurs, the file gets clobbered).

# Default values for variables are set here.
$global:logofile          = "neslogo.avi"
$global:recordedfile      = "recorded.avi"
$global:recordedaudiofile = "audio.wav"
$global:subfile           = "subtitles.sub"
$global:subfont           = "subfont.ttf"
$global:suboptions        = "-subfont-text-scale 2 -sub-bg-alpha 15 -subpos 0"
$global:encodedfile       = "encoded.avi"
$global:vcodec            = "x264"
$global:voptions          = "bitrate=125:pass=3:frameref=15:qp_min=10:qp_max=51:qcomp=1:qp_step=30:ratetol=100:me=umh:me_range=64:subq=6:partitions=all:mixed_refs:trellis=2"
$global:acodec            = "mp3lame"
$global:aoptions          = "preset=40:aq=0:mode=3"

######################################################################################################
# NOTHING PAST THIS POINT IS OF CONCERN TO THE USER. DON'T MODIFY UNLESS YOU KNOW WHAT YOU'RE DOING. #
######################################################################################################

$Host.UI.RawUI.WindowTitle = "NES Encoder Script"
write-host "*************************************************************************" -foregroundcolor green -backgroundcolor black
write-host "* NES Encoder Script v1                                                 *" -foregroundcolor green -backgroundcolor black
write-host "* For use of conversion of NES recorded AVIs into end-user video files. *" -foregroundcolor green -backgroundcolor black
write-host "* (c) 2007, ccfreak2k                                                   *" -foregroundcolor green -backgroundcolor black
write-host "*************************************************************************" -foregroundcolor green -backgroundcolor black

# Import the settings file, if it exists.
if (test-path .\nesconfig.ps1)
{
  write-host "---------------------------------------" -foregroundcolor green -backgroundcolor black
  write-host "nesconfig.cfg found; using config file." -foregroundcolor green -backgroundcolor black
  write-host "---------------------------------------" -foregroundcolor green -backgroundcolor black
  & '.\nesconfig.ps1'
}
else
{
  write-host "----------------------------------------" -foregroundcolor yellow -backgroundcolor black
  write-host "nesconfig.cfg not found; using defaults." -foregroundcolor yellow -backgroundcolor black
  write-host "----------------------------------------" -foregroundcolor yellow -backgroundcolor black
}

write-host " "

# Verify the files.
write-host "------------------" -foregroundcolor yellow -backgroundcolor black
write-host "Verifying files..." -foregroundcolor yellow -backgroundcolor black
$logofile,$recordedfile,$subfile,$subfont | foreach-object
{
  write-host "$_..." -nonewline -foregroundcolor yellow -backgroundcolor black
  if (test-path $_)
  {
    write-host "OK" -foregroundcolor green -backgroundcolor black
  }
  else
  {
    write-host "Failed!" -foregroundcolor red -backgroundcolor black
    write-host "Check your files." -foregroundcolor red -backgroundcolor black
    exit
  }
}

# Verify other variables.
write-host "---------------------------------------------------------" -foregroundcolor yellow -backgroundcolor black
write-host "File verification succeeded. Verifying other variables..." -foregroundcolor yellow -backgroundcolor black
$suboptions,$vcodec,$voptions,$acodec,$aoptions | foreach-object
{
  if ($_ -eq "")
  {
    write-host "Failed!" -foregroundcolor red -backgroundcolor black
    write-host "Check your codec choices/options." -foregroundcolor red -blackground black
    exit
  }
  else
  {
    write-host "OK" -foregroundcolor green -backgroundcolor black
  }
}

write-host "Variable verification succeeded." -foregroundcolor green -backgroundcolor black
write-host "--------------------------------" -foregroundcolor green -backgroundcolor black
write-host " "

# The fluff is over. Serious business from now on.
# First, run the first command.

write-host "-------------------------------------------" -foregroundcolor green -backgroundcolor black
write-host "Step 1: Mix logo and recorded into one file" -foregroundcolor green -backgroundcolor black
write-host "-------------------------------------------" -foregroundcolor green -backgroundcolor black
$Host.UI.RawUI.WindowTitle = "NES Encoder Script - Step 1: Mix"
# This now uses x264 lossless (q=0) instead of ffv1; thanks adelikat
.\mencoder.exe -priority idle -oac pcm -mc 0 -ovc x264 -x264encopts qp=0:partitions=all:me=umh:me_range=64 -o mixed.avi $logofile $recordedfile

#if ($file.length -gt 0) #This originally checked file length.
if ($LASTEXITCODE -eq 0) #We check to see if the program exited successfully.
{
  # The last command was successful. Keep going.
  write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
  write-host "Step 2: Video encoding pass 1/3" -foregroundcolor green -backgroundcolor black
  write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
  $Host.UI.RawUI.WindowTitle = "NES Encoder Script - Step 2: Video Pass 1"
  .\mencoder.exe -priority idle -vf decimate=10:0:0:1 -aspect 4:3 -oac copy -mc 0 -ovc $vcodec -x264encopts pass=1 -o Video_is_encoding.avi mixed.avi -sub $subfile $suboptions -font $subfont
  if ($LASTEXITCODE -eq 0)
  {
    # On to step three.
    write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
    write-host "Step 3: Video encoding pass 2/3" -foregroundcolor green -backgroundcolor black
    write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
    $Host.UI.RawUI.WindowTitle = "NES Encoder Script - Step 3: Video Pass 2"
    .\mencoder.exe -aspect 4:3 -vf decimate=10:0:0:1 -priority idle -oac copy -mc 0 -ovc $vcodec -x264encopts $voptions -o Video_is_encoding.avi mixed.avi -sub $subfile $suboptions -font $subfont
    if ($LASTEXITCODE -eq 0)
    {
      # Step 4.
      write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
      write-host "Step 4: Video encoding pass 3/3" -foregroundcolor green -backgroundcolor black
      write-host "-------------------------------" -foregroundcolor green -backgroundcolor black
      $Host.UI.RawUI.WindowTitle = "NES Encoder Script - Step 4: Video Pass 3"
      .\mencoder.exe -aspect 4:3 -vf decimate=10:0:0:1 -priority idle -oac copy -mc 0 -ovc $vcodec -x264encopts $voptions -o Video_is_encoding.avi mixed.avi -sub $subfile $suboptions -font $subfont
      if ($LASTEXITCODE -eq 0)
      {
        # Last step!
        write-host "--------------------" -foregroundcolor green -backgroundcolor black
        write-host "Step 5: Encode audio" -foregroundcolor green -backgroundcolor black
        write-host "--------------------" -foregroundcolor green -backgroundcolor black
        $Host.UI.RawUI.WindowTitle = "NES Encoder Script - Step 5: Audio"
        .\mencoder.exe -priority idle -oac $acodec -mc 0 -lameopts $aoptions -ovc copy -o $encodedfile Video_is_encoding.avi
        # The train stops here. Thanks for riding.
        if ($LASTEXITCODE -ne 0)
        {
          write-host "--------------------------------------------" -foregroundcolor red -background black
          write-host "Error: Step 5 failed with an exit code of ' -nonewline -foregroundcolor red -background black
          write-host $LASTEXITCODE -foregroundcolor red -background black
          write-host "Check the output of mencoder for details.   " -foregroundcolor red -background black
          write-host "--------------------------------------------" -foregroundcolor red -background black
          $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
          exit # Ja mata!
        }
        write-host "******************************" -foregroundcolor green -backgroundcolor black
        write-host "* Encoding process complete! *" -foregroundcolor green -backgroundcolor black
        write-host "******************************" -foregroundcolor green -backgroundcolor black
        $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
        exit
      }
      else
      {
        write-host "--------------------------------------------" -foregroundcolor red -background black
        write-host "Error: Step 4 failed with an exit code of " -nonewline -foregroundcolor red -background black
        write-host $LASTEXITCODE -foregroundcolor red -background black
        write-host "Check the output of mencoder for details.   " -foregroundcolor red -background black
        write-host "--------------------------------------------" -foregroundcolor red -background black
        $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
        exit
      }
    }
    else
    {
      write-host "--------------------------------------------" -foregroundcolor red -background black
      write-host "Error: Step 3 failed with an exit code of " -nonewline -foregroundcolor red -background black
      write-host $LASTEXITCODE -foregroundcolor red -background black
      write-host "Check the output of mencoder for details.   " -foregroundcolor red -background black
      write-host "--------------------------------------------" -foregroundcolor red -background black
      $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
      exit
    }
  }
  else
  {
    write-host "--------------------------------------------" -foregroundcolor red -background black
    write-host "Error: Step 2 failed with an exit code of " -nonewline -foregroundcolor red -background black
    write-host $LASTEXITCODE -foregroundcolor red -background black
    write-host "Check the output of mencoder for details.   " -foregroundcolor red -background black
    write-host "--------------------------------------------" -foregroundcolor red -background black
    $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
    exit
  }
}
else
{
  write-host "--------------------------------------------" -foregroundcolor red -background black
  write-host "Error: Step 1 failed with an exit code of " -nonewline -foregroundcolor red -background black
  write-host $LASTEXITCODE -foregroundcolor red -background black
  write-host "Check the output of mencoder for details.   " -foregroundcolor red -background black
  write-host "--------------------------------------------" -foregroundcolor red -background black
  $Host.UI.RawUI.WindowTitle = "Windows PowerShell"
  exit
}