fixing issue with mapping in video nodes

This commit is contained in:
John Andrews
2022-07-08 20:34:12 +12:00
parent 5f928142ff
commit 10893808b4
21 changed files with 125 additions and 63 deletions

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -22,7 +22,7 @@ public class Apprise: Node
[Select(nameof(MessageTypeOptions), 3)]
public string MessageType { get; set; } = string.Empty;
private static List<ListOption> _MessageTypeOptions = new List<ListOption>();
private static List<ListOption> _MessageTypeOptions;
public static List<ListOption> MessageTypeOptions
{
get

View File

@@ -4,8 +4,8 @@
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>
<Authors>John Andrews</Authors>

View File

@@ -5,8 +5,8 @@
<Nullable>enable</Nullable>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>
<Authors>John Andrews</Authors>

View File

@@ -4,8 +4,8 @@
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -9,8 +9,8 @@
<PublishTrimmed>true</PublishTrimmed>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>
<Authors>John Andrews</Authors>

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -6,8 +6,8 @@
<Nullable>enable</Nullable>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -6,8 +6,8 @@
<Nullable>enable</Nullable>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FileFlows.$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>

View File

@@ -6,8 +6,8 @@
<Nullable>enable</Nullable>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>
<Authors>John Andrews</Authors>

View File

@@ -197,14 +197,14 @@ public class FfmpegBuilderAudioAddTrack : FfmpegBuilderNode
{
return new[]
{
"-map", source,
"-map", "0:a:{sourceTypeIndex}",
"-c:a:{index}",
codec
};
}
return new[]
{
"-map", source,
"-map", "0:a:{sourceTypeIndex}",
"-c:a:{index}",
codec,
"-b:a:{index}", bitrate + "k"
@@ -216,7 +216,7 @@ public class FfmpegBuilderAudioAddTrack : FfmpegBuilderNode
{
return new[]
{
"-map", source,
"-map", "0:a:{sourceTypeIndex}",
"-c:a:{index}",
codec,
"-ac:a:{index}", channels.ToString()
@@ -224,7 +224,7 @@ public class FfmpegBuilderAudioAddTrack : FfmpegBuilderNode
}
return new[]
{
"-map", source,
"-map", "0:a:{sourceTypeIndex}",
"-c:a:{index}",
codec,
"-ac:a:{index}", channels.ToString(),

View File

@@ -28,7 +28,12 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes
bool hasChange = false;
int actualIndex = 0;
int overallIndex = 0;
int currentType = 0;
string sourceExtension = model.VideoInfo.FileName.Substring(model.VideoInfo.FileName.LastIndexOf(".") + 1).ToLower();
string extension = (model.Extension?.EmptyAsNull() ?? "mkv").ToLower();
foreach (var item in model.VideoStreams.Select((x, index) => (stream: (FfmpegStream)x, index, type: 1)).Union(
model.AudioStreams.Select((x, index) => (stream: (FfmpegStream)x, index, type: 2))).Union(
model.SubtitleStreams.Select((x, index) => (stream: (FfmpegStream)x, index, type: 3))))
@@ -43,10 +48,29 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes
actualIndex = 0;
currentType = item.type;
}
ffArgs.AddRange(item.stream.GetParameters(actualIndex));
VideoFileStream vfs = item.stream is FfmpegVideoStream ? ((FfmpegVideoStream)item.stream).Stream :
item.stream is FfmpegAudioStream ? ((FfmpegAudioStream)item.stream).Stream :
((FfmpegSubtitleStream)item.stream).Stream;
var streamArgs = item.stream.GetParameters(new FfmpegStream.GetParametersArgs()
{
OutputOverallIndex = overallIndex,
OutputTypeIndex = actualIndex,
SourceExtension = sourceExtension,
DestinationExtension = extension
});
for(int i = 0; i < streamArgs.Length; i++)
{
streamArgs[i] = streamArgs[i].Replace("{sourceTypeIndex}", vfs.TypeIndex.ToString());
streamArgs[i] = streamArgs[i].Replace("{index}", actualIndex.ToString());
}
ffArgs.AddRange(streamArgs);
hasChange |= item.stream.HasChange | item.stream.ForcedChange;
++actualIndex;
++overallIndex;
}
if(model.MetadataParameters?.Any() == true)
@@ -58,7 +82,6 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes
if (model.ForceEncode == false && hasChange == false && (string.IsNullOrWhiteSpace(model.Extension) || args.WorkingFile.ToLower().EndsWith("." + model.Extension.ToLower())))
return 2; // nothing to do
string extension = model.Extension?.EmptyAsNull() ?? "mkv";
List<string> startArgs = new List<string>();
if (model.InputFiles?.Any() == false)

View File

@@ -23,15 +23,15 @@
_Filter = value ?? new List<string>();
}
}
public override string[] GetParameters(int outputIndex)
public override string[] GetParameters(GetParametersArgs args)
{
if (Deleted)
return new string[] { };
var results = new List<string> { "-map", "0:a:" + Stream.TypeIndex };
var results = new List<string> { "-map", "0:a:{sourceTypeIndex}" };
if (EncodingParameters.Any() == false && Filter.Any() == false)
{
results.Add("-c:a:" + outputIndex);
results.Add("-c:a:{index}");
results.Add("copy");
}
else
@@ -41,9 +41,9 @@
if (EncodingParameters[0] == "-map")
results.Clear();
else
results.Add("-c:a:" + outputIndex);
results.Add("-c:a:{index}");
results.AddRange(EncodingParameters.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(EncodingParameters.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
}
else
{
@@ -55,27 +55,27 @@
if (EncodingParameters.Any() == false && Filter.Any(x => x?.Contains("loudnorm") == true) == true)
{
// normalized. we must set the codec
results.AddRange(new[] { $"-c:a:{outputIndex}", Stream.Codec });
results.AddRange(new[] { "-c:a:{index}", Stream.Codec });
}
results.Add("-filter:a:" + outputIndex);
results.Add("-filter:a:{index}");
results.Add(String.Join(", ", Filter));
}
}
if (string.IsNullOrWhiteSpace(this.Title) == false)
{
results.Add($"-metadata:s:a:{outputIndex}");
results.Add("-metadata:s:a:{index}");
results.Add($"title={(this.Title == FfmpegStream.REMOVED ? "" : this.Title)}");
}
if(string.IsNullOrWhiteSpace(this.Language) == false)
{
results.Add($"-metadata:s:a:{outputIndex}");
results.Add("-metadata:s:a:{index}");
results.Add($"language={(this.Language == FfmpegStream.REMOVED ? "" : this.Language)}");
}
if (Metadata.Any())
results.AddRange(Metadata.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(Metadata.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
return results.ToArray();
}

View File

@@ -12,7 +12,12 @@ public abstract class FfmpegStream
public abstract bool HasChange { get; }
public bool ForcedChange { get; set; }
public abstract string[] GetParameters(int outputIndex);
/// <summary>
/// Gets the parameters for the stream
/// </summary>
/// <param name="args">the arguments</param>
/// <returns>the parameters for this stream</returns>
public abstract string[] GetParameters(GetParametersArgs args);
private List<string> _Metadata = new List<string>();
public List<string> Metadata
@@ -23,4 +28,32 @@ public abstract class FfmpegStream
_Metadata = value ?? new List<string>();
}
}
/// <summary>
/// Args passed to get parameters
/// </summary>
public class GetParametersArgs
{
/// <summary>
/// Gets or sets the overall index for all streams
/// </summary>
public int OutputOverallIndex { get; set; }
/// <summary>
/// the index for just this type of streams
/// </summary>
public int OutputTypeIndex { get; set; }
/// <summary>
/// Gets or sets the source extension
/// </summary>
public string SourceExtension { get; set; }
/// <summary>
/// Gets or sets the destination extension
/// </summary>
public string DestinationExtension { get; set; }
}
}

View File

@@ -6,31 +6,37 @@
public override bool HasChange => false;
public override string[] GetParameters(int outputIndex)
public override string[] GetParameters(GetParametersArgs args)
{
if (Deleted)
return new string[] { };
var results = new List<string> { "-map", "0:s:" + outputIndex, "-c:s:" + Stream.TypeIndex };
//if (EncodingParameters.Any() == false)
var results = new List<string> { "-map", "0:s:{sourceTypeIndex}", "-c:s:{index}" };
if(args.DestinationExtension == "mkv" && Stream.Codec == "mov_text")
{
results.Add("srt");
}
else
{
results.Add("copy");
}
if (string.IsNullOrWhiteSpace(this.Title) == false)
{
results.Add($"-metadata:s:s:{outputIndex}");
results.Add($"-metadata:s:s:{args.OutputTypeIndex}");
results.Add($"title={(this.Title == FfmpegStream.REMOVED ? "" : this.Title)}");
}
if (string.IsNullOrWhiteSpace(this.Language) == false)
{
results.Add($"-metadata:s:s:{outputIndex}");
results.Add($"-metadata:s:s:{args.OutputTypeIndex}");
results.Add($"language={(this.Language == FfmpegStream.REMOVED ? "" : this.Language)}");
}
if (Metadata.Any())
{
results.AddRange(Metadata.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(Metadata.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
}
return results.ToArray();

View File

@@ -62,15 +62,15 @@
public override bool HasChange => EncodingParameters.Any() || Filter.Any() || AdditionalParameters.Any();
public override string[] GetParameters(int outputIndex)
public override string[] GetParameters(GetParametersArgs args)
{
if (Deleted)
return new string[] { };
var results = new List<string> { "-map", "0:v:" + outputIndex };
var results = new List<string> { "-map", "0:v:{sourceTypeIndex}" };
if (Filter.Any() == false && EncodingParameters.Any() == false && AdditionalParameters.Any() == false)
{
results.Add("-c:v:" + Stream.TypeIndex);
results.Add("-c:v:{index}");
results.Add("copy");
return results.ToArray();
}
@@ -79,9 +79,9 @@
if (EncodingParameters.Any())
{
results.Add("-c:v:" + Stream.TypeIndex);
results.AddRange(EncodingParameters.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(EncodingParameters.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
if(OptionalEncodingParameters.Any())
results.AddRange(OptionalEncodingParameters.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(OptionalEncodingParameters.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
}
else
{
@@ -89,24 +89,24 @@
//results.Add("copy");
}
if (AdditionalParameters.Any())
results.AddRange(AdditionalParameters.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(AdditionalParameters.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
if (Filter.Any() || OptionalFilter.Any())
{
results.Add("-filter:v:" + outputIndex);
results.Add(String.Join(", ", Filter.Concat(OptionalFilter)).Replace("{index}", outputIndex.ToString()));
results.Add("-filter:v:" + args.OutputTypeIndex);
results.Add(String.Join(", ", Filter.Concat(OptionalFilter)).Replace("{index}", args.OutputTypeIndex.ToString()));
}
}
if (string.IsNullOrWhiteSpace(this.Title) == false)
{
results.Add($"-metadata:s:v:{outputIndex}");
results.Add($"-metadata:s:v:{args.OutputTypeIndex}");
results.Add($"title={(this.Title == FfmpegStream.REMOVED ? "" : this.Title)}");
}
if (Metadata.Any())
{
results.AddRange(Metadata.Select(x => x.Replace("{index}", outputIndex.ToString())));
results.AddRange(Metadata.Select(x => x.Replace("{index}", args.OutputTypeIndex.ToString())));
}
return results.ToArray();

View File

@@ -6,8 +6,8 @@
<Nullable>enable</Nullable>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishSingleFile>true</PublishSingleFile>
<FileVersion>0.8.4.101</FileVersion>
<ProductVersion>0.8.4.101</ProductVersion>
<FileVersion>0.8.4.152</FileVersion>
<ProductVersion>0.8.4.152</ProductVersion>
<PublishTrimmed>true</PublishTrimmed>
<Company>FileFlows</Company>
<Authors>John Andrews</Authors>