Automated install of FAB Subtitler

FAB Subtitler can be installed by starting the file setupfabsubtitler.exe with specific parameters.

There may be two scenarios how FAB Subtitler may be installed:

  • when the USB Dongle is already plugged into the PC and internet connection is available for software activation (INSTALLATION MODE 1)
  • when the USB Dongle is not plugged into the PC or the internet connection is not available for software activation (INSTALLATION MODE 2)

The procedure is completely the same when installing FAB Subtitler for the first time and also when installing a software update.

INSTALLATION MODE 1 for FAB Subtitler

When the USB Dongle is already plugged into the PC and internet connection is available for software activation the following command line can be used to install FAB Subtitler:

setupfabsubtitler.exe /verysilent /password=password /norestart

During the installation the software activation over internet will be started. If the activation is successful then the correct FAB Subtitler Edition will be installed. If the activation is not successful then FAB Subtitler will not be installed.

You can use the following parameter to write a log file during installation:

/LOG="C:\Temp\FABSubtitler-Setup.log"

The exit code after the installation process is 0 if the installation was successful. If the installation was not successful then the exit code will not be 0 and you should check the log file to see what caused the installation to be aborted.

INSTALLATION MODE 2 for FAB Subtitler

When the USB Dongle is not plugged into the PC or the internet connection is not available for software activation the following command line can be used to install FAB Subtitler:

To install FAB Subtitler STD/PRO/LIVE/MPEG:

setupfabsubtitler.exe /verysilent /password=password /norestart /type=workstation

To install FAB Subtitler BCAST/XCD:

setupfabsubtitler.exe /verysilent /password=password /norestart /type=bcastxcd

Please note that the software license will not be activated during installation and therefore it will be necessary to activate the license during the first start of FAB Subtitler and administrator rights will be required temporarily during activation.

You can use the following parameter to write a log file during installation:

/LOG="C:\Temp\FABSubtitler-Setup.log"

The exit code after the installation process is 0 if the installation was successful. If the installation was not successful then the exit code will not be 0 and you should check the log file to see what caused the installation to be aborted.

Installation of LAVFilters

To install the latest version of LAVFilters first download the installation .exe file from

https://github.com/Nevcairiel/LAVFilters/releases

and then start it by:

LAVFilters-0.74.1-Installer.exe /VERYSILENT /NORESTART

You can use the following parameter to write a log file during installation:

/LOG="C:\Temp\LAVFilters-Setup.log"

The exit code after the installation process is 0 if the installation was successful. If the installation was not successful then the exit code will not be 0 and you should check the log file to see what caused the installation to be aborted.

Installation of FFmpeg

To install the correct version of FFmpeg for FAB Subtitler first make sure to download the correct FFmpeg version:

https://www.fab-online.com/publicdownload/ffmpeg-7.1-win32-shared.zip

After that unpack the file to the FAB Subtitler folder into the subfolder ffmpeg.

Powershell script to install FAB Subtitler, LAVFilters and FFMPEG

The following Powershell script (setupfabsubtitler.ps1) can be started by the following command line and make sure that it has administrator rights:

powershell -executionpolicy unrestricted -File C:\path\setupfabsubtitler.ps1

Make sure to enter the correct download path and password into the variables $DownloadUrl and $DownloadPassword. The $DownloadUrl can be in one of the following formats:

https://www.correctserver.com/path/file.zip
or
\\server\sharedfolder\subfolder\file.zip

setupfabsubtitler.ps1:

$DownloadUrl = "https://fabsubtitlerurl"
$DownloadPassword = "fabsubtitlerpassword"

$LAVFiltersUrl = "https://github.com/Nevcairiel/LAVFilters/releases/download/0.79.2/LAVFilters-0.79.2-Installer.exe"
$FFMPEGUrl = "https://www.fab-online.com/publicdownload/ffmpeg-7.1-win32-shared.zip"


$BasePath = [Environment]::GetFolderPath("MyDocuments")
$BaseFolder = $BasePath + "\FABInstaller"
if (-not (Test-Path $BaseFolder)) { New-Item -ItemType directory -Path $BaseFolder }
$DownloadFolder = $BaseFolder + "\Download"
if (-not (Test-Path $DownloadFolder)) { New-Item -ItemType directory -Path $DownloadFolder }
$ExpandFolder = $BaseFolder + "\Expanded"
if (-not (Test-Path $ExpandFolder)) { New-Item -ItemType directory -Path $ExpandFolder }
$LogFolder = $BaseFolder + "\Logs"
if (-not (Test-Path $LogFolder)) { New-Item -ItemType directory -Path $LogFolder }
$LogFile = $LogFolder + "\" + (Get-Date).toString("yyyyMMdd-HHmmss") + "-Log.log"

Function LogWrite {
  Param ([string]$LogString)
  $Stamp = (Get-Date).toString("yyyy-MM-dd HH:mm:ss`t`t")
  $Line = "$Stamp $LogString"
  Write-Host $Line
  $Line | Out-File $LogFile -Append
  $Line = ""
  $Line | Out-File $LogFile -Append
}
Function LogWriteError {
  Param ([string]$LogString)
  $Stamp = (Get-Date).toString("yyyy-MM-dd HH:mm:ss `t ERROR`t")
  $Line = "$Stamp $LogString"
  Write-Host $Line
  $Line | Out-File $LogFile -Append
  $Line = ""
  $Line | Out-File $LogFile -Append
}

function DownloadFile {
  param([string]$WebUrl, [string]$WebFile)
  Remove-Item $DownloadFolder\* -Force
  Try {
    if ($WebUrl.StartsWith("http", [System.StringComparison]::CurrentCultureIgnoreCase)) {
      LogWrite "Downloading from: $WebUrl to file: $WebFile"
      & curl.exe -L $WebUrl --output $WebFile
      if ($LASTEXITCODE -ne "0") {
        LogWriteError "The file cannot be downloaded from: $WebUrl to $WebFile"
        return $false
      }
    }
    else {
      LogWrite "Copying from: $WebUrl to file: $WebFile"
      Copy-Item -Path $WebUrl -Destination $WebFile
    }
    
  }
  Catch {
    LogWriteError "The file cannot be downloaded from: $WebUrl"
    return $false
  }
  return $true
}

function InstallFABSubtitler {
  LogWrite ("Starting installation of FAB Subtitler")
  $DownloadedFile = $DownloadFolder + "\setupfabsubtitler.zip"
  LogWrite ("Downloading " + $DownloadUrl + " to " + $DownloadedFile)
  if (-not (DownloadFile "$DownloadUrl" "$DownloadedFile") -or -not (Test-Path $DownloadedFile)) {
    LogWriteError "File could not be downloaded: $DownloadUrl to $DownloadedFile"
    return $false
  }
  Remove-Item $ExpandFolder\* -Force
  LogWrite "Extracting $DownloadedFile to $ExpandFolder"
  Expand-Archive $DownloadedFile -DestinationPath $ExpandFolder -Force
  $ExeFile = "$ExpandFolder" +"\" + "setupfabsubtitler.exe"
  if (-not (Test-Path $ExeFile)) {
    LogWriteError "Cannot find the file $ExeFile to start the update"
    return $false
  }
  $LogFileSetup = $LogFolder + "\" + (Get-Date).toString("yyyyMMdd-HHmmss") + "-Setup-Log.log"
  LogWrite ("Executing " + $ExeFile)
  Start-Process -FilePath "$ExeFile" -ArgumentList "/verysilent","/password=$DownloadPassword","/norestart","/type=workstation","/log=$LogFileSetup" -Wait -WindowStyle Hidden
  Remove-Item $DownloadedFile -Force
  LogWrite ("Installation of FAB Subtitler has completed")
  return $true
}

function InstallLAVFilters {
  LogWrite ("Starting installation of LAVFilters")
  $DownloadedFile = $DownloadFolder + "\LAVFiltersInstaller.exe"
  LogWrite ("Downloading " + $LAVFiltersUrl + " to " + $DownloadedFile)
  if (-not (DownloadFile "$LAVFiltersUrl" "$DownloadedFile") -or -not (Test-Path $DownloadedFile)) { 
    LogWriteError "File could not be downloaded: $DownloadUrl to $DownloadedFile"
    return $false
  }
  $LogFileSetup = $LogFolder + "\" + (Get-Date).toString("yyyyMMdd-HHmmss") + "-Setup-Log.log"
  LogWrite ("Executing " + $DownloadedFile)
  Start-Process -FilePath "$DownloadedFile" -ArgumentList "/verysilent","/norestart","/log=$LogFileSetup" -Wait -WindowStyle Hidden
  Remove-Item $DownloadedFile -Force
  LogWrite ("Installation of LAVFilters has completed")
  return $true
}

function InstallFFMPEG {
  LogWrite ("Starting installation of FFMPEG")
  $DownloadedFile = $DownloadFolder + "\ffmpeg.zip"
  LogWrite ("Downloading " + $FFMPEGUrl + " to " + $DownloadedFile)
  if (-not (DownloadFile "$FFMPEGUrl" "$DownloadedFile") -or -not (Test-Path $DownloadedFile)) {
    LogWriteError "File could not be downloaded: $DownloadUrl to $DownloadedFile"
    return $false
  }
  $FABSubtitlerFolder = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\FAB\FAB Subtitler').InstDir
  if (($FABSubtitlerFolder -eq "") -or -not (Test-Path $FABSubtitlerFolder)) {
    LogWriteError "FAB Subtitler is not installed"
    return $false
  }
  if (-Not ($FABSubtitlerFolder.EndsWith("\"))) {
      $FABSubtitlerFolder = $FABSubtitlerFolder + "\"
  }
  $FABSubtitlerFolder = $FABSubtitlerFolder + "ffmpeg"
  if (-not (Test-Path $FABSubtitlerFolder)) { New-Item -ItemType directory -Path $FABSubtitlerFolder }
  LogWrite "Extracting $DownloadedFile to $FABSubtitlerFolder"
  Expand-Archive $DownloadedFile -DestinationPath $FABSubtitlerFolder -Force
  Remove-Item $DownloadedFile -Force
  LogWrite ("Installation of FFMPEG has completed")
  return $true
}

LogWrite ("Starting FAB Installer Script")
If (-not ([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544"))) {
  LogWriteError "The program cannot start without administrator privileges, please run as administrator"
  Exit
}

if (-not (InstallFABSubtitler)) {LogWriteError "FAB Subtitler could not be installed"}
if (-not (InstallLAVFilters)) {LogWriteError "LAVFilters could not be installed"}
if (-not (InstallFFMPEG)) {LogWriteError "FFMPEG could not be installed"}

LogWrite "Installer script has finished"

This page was last updated on 2025-01-28