Function Examples
Here are some examples of functions you can use.
Different outputs based on file size
   if(Variables.file.Size > 10_000_000_000) // 10GB
   	return 1; // output 1
   if(Variables.file.Size > 2_000_000_000) // 2GB
   	return 2; // output 2
   let reducedSize = (Variables.file.Size / Variables.file.Orig.Size) * 100;
   if(reducedSize < 10)
   	return 0; // its too small, something went wrong
   return 3; // output 3
Copying files in a Function
// file here is a FileInfo object which makes it easy to get the short filename (file.Name)
for(let file in new System.IO.DirectoryInfo('/mnt/source').GetFiles('*.*'))
{
   System.IO.File.Copy(file.FullName, '/mnt/destination/' + file.Name);
}
// alternative, where file is a string of the full filename
for(let file in System.IO.Directory.GetFiles('/mnt/source', '*.*')
{
   System.IO.File.Copy(file, '/mnt/destination/' + file.substring(file.lastIndexOf('/') + 1));
}
Note: This uses C# to do the copy and look for files
Disable all but first Audio / Subtitle
This example function will disable all subtitle and all but the very first Audio track
This must be used between a FFmpeg Builder: Start and FFmpeg Builder: Executor
for(let i=1;i<Variables?.FfmpegBuilderModel?.AudioStreams?.length;i++)
{
	let as = Variables.FfmpegBuilderModel.AudioStreams[i];
	as.Deleted = true;
}
for(let i=0;i<Variables?.FfmpegBuilderModel?.SubtitleStreams?.length;i++)
{
	let sub = Variables.FfmpegBuilderModel.SubtitleStreams[i];
	sub.Deleted = true;
}
return 1;
Disable all but first English/Japanese Audio
This example function disables all but the first English and Japanese Audio track found
This must be used between a FFmpeg Builder: Start and FFmpeg Builder: Executor
let foundEnglish = false;
let foundJapanese = false;
let first = null;
for(let i=0;i<Variables?.FfmpegBuilderModel?.AudioStreams?.length;i++)
{
    let as = Variables.FfmpegBuilderModel.AudioStreams[i];
    as.Deleted = true;
	if(i === 0)
		first = as;
    let isEnglish = /^en/i.test('' + as.Language);
    let isJapanese = /^(jp|jap)/i.test('' + as.Language);
    if(foundEnglish && foundJapanese)
    {
        // already found japanese and english remove the rest of the audio
        continue;
    }
    if(foundEnglish && isEnglish)
    {
        // already found english
        continue;
    }
    if(foundJapanese && isJapanese)
    {
        // already found japanese
        continue;
    }
    // else we want to keep this track, so make sure its not deleted
    as.Deleted = false;
    if(isEnglish)
        foundEnglish = true;
    if(isJapanese)
        foundJapanese = true;
}
if(foundEnglish === false && foundJapanese === false && first)
{
	// enable the first audio for safety
	first.Deleted = false;
}
return 1;
Clear Video Title
This example will clear all titles from video streams
This must be used between a FFmpeg Builder: Start and FFmpeg Builder: Executor
for(let i=0;i<Variables?.FfmpegBuilderModel?.VideoStreams?.length;i++)
{
    let video = Variables.FfmpegBuilderModel.VideoStreams[i];
    video.Title = '';
}
return 1;
Set Audio Stream 0 as default
This example will iterate all audio streams in the FFmpeg Builder and set the first audio stream as the default stream.
This must be used between a FFmpeg Builder: Start and FFmpeg Builder: Executor
let length = Variables?.FfmpegBuilderModel?.AudioStreams?.length;
if(!length)
{
    Logger.ILog('No audio stream found"');
    return 1;
}
Logger.ILog('Found audio streams: ' + length);
for(let i=0;i<length;i++)
{
    let as = Variables.FfmpegBuilderModel.AudioStreams[i];
    if(as)
        as.IsDefault = i === 0;
}
return 1;
Checking a File Exists
This example will look if a file exists in the source directory.
This is helpful if you want to skip processing of files if a certain file exists in that folder.
var dir = new System.IO.FileInfo(Variables.file.FullName).Directory;
var exists = dir.GetFiles("*.ffignore").Length > 0;
Logger.ILog("ffignore exists: " + exists);
return exists ? 1 : 2;
Creating a File
This example creates a file next to the original file, this could be used to say this file has been processed.
var newFile = Variables.file.Orig.FullName + ".converted";
System.IO.File.Create(newFile);
return 1;