namespace EmbyToolbox.Models;
/// Сторонний аудиофайл (контейнер или raw), возможно с несколькими аудиопотоками.
public sealed class ExternalAudioFile
{
public ExternalAudioFile(string fullPath, IReadOnlyList streams)
{
FullPath = fullPath;
Streams = streams;
}
public string FullPath { get; }
public IReadOnlyList Streams { get; }
}
/// Один аудиопоток внутри (индекс для ffmpeg -map input:a:N).
public sealed class ExternalAudioStream
{
public required string FileFullPath { get; init; }
/// Порядковый номер аудиопотока внутри файла (0 = первый audio), для -map M:a:N.
public int StreamOrdinal { get; init; }
public required string CodecName { get; init; }
public string? TitleFromProbe { get; init; }
public int? Channels { get; init; }
public int? SampleRateHz { get; init; }
public long? BitRateBps { get; init; }
}
/// Результат поиска sidecar: объединённые файлы для плана/ffmpeg и разобранное внешнее аудио.
public sealed class SidecarDiscoveryResult
{
public SidecarDiscoveryResult(IReadOnlyList sidecars, IReadOnlyList externalAudioFiles)
{
Sidecars = sidecars;
ExternalAudioFiles = externalAudioFiles;
}
public IReadOnlyList Sidecars { get; }
/// Разбор аудиофайлов (пути совпадают с audio-).
public IReadOnlyList ExternalAudioFiles { get; }
}