* wip * fix songs again * don't use lists of video and audio input files * test concat command output * move concat pipeline * start to use ffmpeg state * add ffmpeg state and audio state * audio state is required * attach input options directly to input files * move filters to input files * add watermark support
64 lines
1.6 KiB
C#
64 lines
1.6 KiB
C#
using ErsatzTV.FFmpeg.Format;
|
|
using ErsatzTV.FFmpeg.Option;
|
|
using ErsatzTV.FFmpeg.State;
|
|
using LanguageExt;
|
|
|
|
namespace ErsatzTV.FFmpeg;
|
|
|
|
public abstract record InputFile(string Path, IList<MediaStream> Streams)
|
|
{
|
|
public List<IInputOption> InputOptions { get; } = new();
|
|
public List<IPipelineFilterStep> FilterSteps { get; } = new();
|
|
}
|
|
|
|
public record ConcatInputFile(string Url, FrameSize Resolution) : InputFile(
|
|
Url,
|
|
new List<MediaStream>
|
|
{
|
|
new VideoStream(
|
|
0,
|
|
string.Empty,
|
|
Option<IPixelFormat>.None,
|
|
Resolution,
|
|
Option<string>.None,
|
|
false)
|
|
})
|
|
{
|
|
public void AddOption(IInputOption option)
|
|
{
|
|
if (option.AppliesTo(this))
|
|
{
|
|
InputOptions.Add(option);
|
|
}
|
|
}
|
|
}
|
|
|
|
public record AudioInputFile(string Path, IList<AudioStream> AudioStreams, AudioState DesiredState) : InputFile(
|
|
Path,
|
|
AudioStreams.Cast<MediaStream>().ToList())
|
|
{
|
|
public void AddOption(IInputOption option)
|
|
{
|
|
if (option.AppliesTo(this))
|
|
{
|
|
InputOptions.Add(option);
|
|
}
|
|
}
|
|
}
|
|
|
|
public record VideoInputFile(string Path, IList<VideoStream> VideoStreams) : InputFile(
|
|
Path,
|
|
VideoStreams.Cast<MediaStream>().ToList())
|
|
{
|
|
public void AddOption(IInputOption option)
|
|
{
|
|
if (option.AppliesTo(this))
|
|
{
|
|
InputOptions.Add(option);
|
|
}
|
|
}
|
|
}
|
|
|
|
public record WatermarkInputFile
|
|
(string Path, IList<VideoStream> VideoStreams, WatermarkState DesiredState) : VideoInputFile(Path, VideoStreams);
|