Vorspann und Abspann — erkannt, abgelegt, überspringbar
Beides mit derselben Rechnung, nur in einem anderen Fenster: vorn die ersten fünfzehn Minuten, hinten die letzten zehn. Was `Tonabgleich` findet, hängt allein daran, welchen Ausschnitt man ihm gibt — eine zweite Erkennung für den Abspann wäre dieselbe Suche ein zweites Mal. Je Staffel verglichen, nicht je Serie: Serien wechseln ihren Vorspann zwischen Staffeln, und über alle hinweg fände man nichts oder das Falsche. Gefundenes über fünf Minuten wird verworfen — zwei Folgen, die dieselbe Datei tragen, teilen vierzig, und darüber stünde sonst ein Überspringen-Knopf. Der Lauf geht auf Zuruf, nicht bei jedem Scan: er liest von jeder Folge ein Stück Ton und dauert Minuten. Der Knopf dafür steht auf der Serienseite, bei den Verwalterknöpfen. Die Marken gehen im Folgenvertrag mit — als „intro" und „credits", die Wörter, die die Apps von Jellyfin her ohnehin kennen. In der App zeichnet sie der vorhandene Überspringen-Knopf, der bisher nie etwas zu tun hatte; im Web ist er neu, rechtsbündig über der Zeitleiste. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
acba683c94
commit
8cf2118723
@@ -123,3 +123,45 @@ public sealed class Stichwortlink
|
||||
public Guid? MovieId { get; init; }
|
||||
public Guid? SeriesId { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>Was für ein Abschnitt eine Marke bezeichnet.</summary>
|
||||
public enum Markenart
|
||||
{
|
||||
/// <summary>Der Vorspann.</summary>
|
||||
Intro,
|
||||
/// <summary>Der Abspann.</summary>
|
||||
Abspann,
|
||||
}
|
||||
|
||||
/// <summary>Ein überspringbarer Abschnitt einer Folge.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// <b>Nur bei Folgen, nicht bei Filmen.</b> Erkannt wird ein Vorspann
|
||||
/// dadurch, dass er sich wiederholt — über die Folgen einer Staffel hinweg.
|
||||
/// Ein Film hat nichts, womit er sich vergleichen liesse, und sein Abspann
|
||||
/// ist nicht derselbe wie der eines anderen Films.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// <b>Zeiten in Sekunden, nicht in Bildern.</b> Dieselbe Folge liegt
|
||||
/// vielleicht in zwei Fassungen mit verschiedener Bildrate vor; die Stelle
|
||||
/// im Film ist dieselbe.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public sealed class Marke
|
||||
{
|
||||
public Guid Id { get; init; } = Guid.CreateVersion7();
|
||||
public required Guid EpisodeId { get; init; }
|
||||
public required Markenart Art { get; init; }
|
||||
public required double VonSekunden { get; set; }
|
||||
public required double BisSekunden { get; set; }
|
||||
|
||||
/// <summary>Wann sie gefunden wurde.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// Damit ein späterer Lauf weiss, was er nicht noch einmal rechnen muss.
|
||||
/// Eine Staffel abzutasten dauert Minuten; sie bei jedem Scan erneut
|
||||
/// abzutasten wäre eine Dauerlast ohne Ertrag.
|
||||
/// </remarks>
|
||||
public DateTimeOffset ErkanntAm { get; set; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user