33d6f34d8a
Background-job transcode (ffmpeg/libopus) after source store; pure C# Ogg walker builds the 0.5s-bucketed granule→byte seek index + captures the OpusHead/OpusTags setup header into a per-track sidecar in a new track-opus vault. Best-effort, additive, regenerated on replace-audio.
34 lines
1.6 KiB
C#
34 lines
1.6 KiB
C#
namespace DeepDrftContent.Processors.Opus;
|
|
|
|
/// <summary>
|
|
/// Host-supplied configuration for the Opus transcode. The only operationally significant knob is
|
|
/// <see cref="FfmpegPath"/> — the transcode shells out to FFmpeg (libopus), which must be present on the
|
|
/// DeepDrftAPI host (see the wave handoff notes). Defaults target Ogg Opus fullband (48 kHz) at 320 kbps,
|
|
/// the artifact the spec fixes (§1).
|
|
/// </summary>
|
|
public sealed class OpusTranscodeOptions
|
|
{
|
|
/// <summary>
|
|
/// Path to the ffmpeg executable. Empty/null resolves to <c>"ffmpeg"</c> (found on PATH). Override
|
|
/// with an absolute path when the binary is not on the host PATH.
|
|
/// </summary>
|
|
public string FfmpegPath { get; set; } = "ffmpeg";
|
|
|
|
/// <summary>Target Opus bitrate in kbps. 320 kbps fullband is the fixed artifact quality (§1).</summary>
|
|
public int BitrateKbps { get; set; } = 320;
|
|
|
|
/// <summary>
|
|
/// Directory for the transient source/output files the transcode stages. Defaults to the system
|
|
/// temp path; the host overrides it to the data-disk upload-staging directory so large files never
|
|
/// land on the small RAM-backed <c>/tmp</c> tmpfs (same constraint the upload path already honours).
|
|
/// </summary>
|
|
public string StagingPath { get; set; } = Path.GetTempPath();
|
|
|
|
/// <summary>
|
|
/// Hard ceiling on a single transcode, in seconds. A run that exceeds it is killed and the track
|
|
/// stays lossless-only (C6). Generous by default — a 1 GB mix is CPU-expensive (§3.1) — but bounded
|
|
/// so a hung ffmpeg never wedges the background worker.
|
|
/// </summary>
|
|
public int TimeoutSeconds { get; set; } = 3600;
|
|
}
|