Skip to content
kfb77 edited this page Mar 17, 2025 · 129 revisions

Beschreibung

  • Autor: Jochen Dolze
  • aktueller Entwickler: kfb77 (Kontakt via VDR Portal)

Ein Programm zum automatischen Setzen von Schnittmarken bei Werbeeinblendungen während einer Sendung. Zusätzlich versucht markad noch den Start und das Ende einer Sendung zu erkennen.

Anschließend kann man beim Abspielen mit Hilfe der Schnittmarken die Werbung überspringen oder die Aufnahme mittels VDR, externer Schnittprogramme (z.B. ProjectX) oder markad selbst schneiden lassen. Je nach Sender und Sendung ist die Erkennung jedoch nicht perfekt und sollte manuell kontrolliert und ggf. überarbeitet werden.

Markad ist ein eigenständiges Programm, das über manuellem Command Line Aufruf, durch eigene Skripe, oder vom VDR durch das markad Plugin gestartet werden kann.

Funktionsweise

Merkmale für Marken

Folgende Merkmale werden zu Erkennung der Marken verwendet, Priorität in dieser Reihenfolge, falls mehrere Merkmale erkannt werden:

  • Änderung der Anzahl verwendeter Tonkanäle bei DolbyDigital Tonspuren (Werbung bei den meisten Sendern derzeit 2-Kanal)
  • Änderung des Bildseitenverhältnisses von 4:3 auf 16:9 (und umgekehrt)
  • Schwarze, horizontale Balken ("letterbox") bei Sendungen im Format 4:3 und 16:9
  • Schwarze, vertikale Balken bei Sendungen im Format 4:3 (Bildseitenverhältnis 16:9)
  • Änderung des Logos
  • kurzes vollständig schwarzes Bild

Logoerkennung

Arbeitsweise

Die Logoerkennung benötigt 4 Schritte:

  • Dekodierung des Videostreams und Ausschnitt des interessanten Bildbereichs
  • Kantendetektierung mittels Sobel-Operator
  • Maskierung mit vorhandenem Logo
  • Vergleich des Ergebnisses mit dem vorhandenem Logo (aus dem letztem Schritt)

Wenn das Bild im Kontrast zum Logo zu hell ist, liefert die Kantendetektierung schlechte Ergebnisse. Dann kann es vorkommen, das ein Logowechsel nicht oder zu viel erkannt wird.

Logo Cache

Logos für den Logo Cache müssen selbst manuell erzeugt werden, sie sind nicht Bestandteil von markad. Um Probleme bei der Logo Erkennung zu minimieren, muss bei Nutzung des Logo Caches die darin enthaltenden Logos laufend manuell auf Aktualität geprüft werden. Sender wechseln häufig ihr Logo, veraltete Logos im Cache haben zur Folge, dass Logos nicht erkannt werden. Sollten Sender unterschiedliche Logos (zum Beispiel für Live Sendungen) oder Logos an unterschiedlichen Positionen verwenden, darf der Logo Cache für solche Sender nicht verwendet werden.

Es ist empfohlen, markad bei jeder Aufnahme selbst das Logo erkennen zu lassen (--autologo=2) und auf die Nutzung des Logo Caches grundsätzlich zu verzichten. Ausnahme hiervon sind Aufnahmen kürzer als 10 Minuten, hier ist das Finden des Logo meist nicht zuverlässig möglich.

Probleme

markad kann den Anfang und das Ende einer Sendung markieren, dies erfolgt nach den gleichen Kriterien wie bei der Markierung von Werbeblöcken (wenn keine Start-/Endemarkierung erkannt werden kann wird der Zeitpunkt für den Timervorlauf/-nachlauf verwendet).

Bei folgenden Konstellationen liefert markad schlechte Ergebnisse bei der Start-/Endeerkennung:

  • einer Sendung in 16:9/Stereo folgt eine weitere Sendung in 16:9/Stereo ohne Logounterbrechung
  • einer Sendung in 4:3 folgt eine weitere Sendung in 4:3 ohne Wechsel des Bildseitenverhältnisses

Generell ist die Logoerkennung die schlechteste aller möglichen Erkennungsarten, denn:

  • Senderlogos werden nicht am Beginn einer Sendung gezeigt, sondern n Sekunden später (bzw. hüpfen von der Mitte an die spätere Endposition), markad markiert aber erst bei sicher erkanntem Logo
  • Einzelne Spots direkt vor dem eigentlichen Werbeblock werden mit Senderlogo ausgestrahlt, diese werden fälschlicherweise Teil der Sendung

Optimierung der Logo Marken

Da wie oben beschrieben die Logoerkennung nur beschränkt zuverlässig und vom Zeitpunkt teilweise ungenau ist, versucht markad diese Marken weiter zu optimieren. Folgende Methoden werden hierzu verwendet:

Sonderlogos

Erkennen von Szenen, wo das Senderlogo durch Logos der aktuellen Sendung ersetzt wird. Dies wird dann ignoriert

Schwarzblende und Stellen ohne Tonsignal

Erkennung von kurzen Stellen vor oder nach der Logo Änderung, wo der Ton fehlt oder ein vollständig schwarzer Bildschirm gesendet wird. Logo Marken werden dann auf diese Stellen verschoben.

VPS

Die VPS Signale können während der Aufnahme aufgezeichnet (marks.vps) werden um sie später zur Optimierung der Marken zu verwenden. Sollte das epg2vdr Plugin installiert sein, muss "DVB/EPG in Datenbank eintragen" auf "Ja" gesetzt sein.

Schneidefunktionen

Wer mit markad Werbung in Filmen markiert hat, sollte nicht unbesehen die Schneidefunktion in VDR für diesen Film aktivieren. Je nachdem, wie ein Sender Werbung einblendet, können einige Werbebilder erhalten bleiben oder einige Filmbilder zu viel rausgeschnitten werden. Auch am Anfang können Szenen verloren gehen, wenn z.B., der Film schon begonnen hat, aber der Text mit dem Vorspann erst später gezeigt wird.

Schnittmarken in VDR verschieben

Um das Schnittmarken zu verschieben, sollte man die Aufnahme starten und die einzelnen Schnittmarken mit den Tasten [7] (springt zurück) oder [9] (springt vor) der Fernbedienung ansteuern und mit [4] (zurück) oder [6] (vor) feinjustieren. Ist man mit dem Ergebnis zufrieden, drückt man die [2]: Der Schnitt wird nun gestartet. Wer ohne Kopie schneiden möchte, sollte sich cutinplace mal genauer anschauen.

Schneiden mit markad

Auch markad selbst beinhaltet eine Schnittfunktion. Eine manuelle Optimierung der Marken ist hier nicht möglich, die original Aufnahme bleibt aber erhalten. Details zur Nutzung siehe Kapitel "Optionen".

Installation

Versionen

produktive Version

https//github.com/kfb77/vdr-plugin-markad

Das jeweils aktuelle Tag ist die empfohlene Version für Distributionen oder das selbst gebaute Programm.

Entwickler Code

https//github.com/kfb77/vdr-plugin-markad/tree/V04

Dies ist der aktuelle Stand der Weiterentwicklung. Hier gibt es keine Tags. Nutzung nur zu Testzwecken.

Distributionen

Folgende VDR spezifische Distributionen stellen markad zur Verfügung

Darüber hinaus ist es in folgenden Linux Distributionen enthalten: Debian, Ubuntu und Fedora

Hardwareanforderungen

Keine

Systemanforderungen

Die Video Festplatte muss mit der Option "noatime" gemounted werden (Eintrag unter /etc/fsttab in der Spalte Options).

Softwareanforderungen

  • build-essential
  • gcc >= 4.8.4
  • git
  • pkg-config or pkgconf
  • vdr-dev >= version 2.2
  • libavcodec-dev >= 58.134.100 (FFmpeg 4.4.2)
  • libavformat-dev
  • libavfilter-dev
  • libswresample-dev

Installation aus Source Code

  • git clone git://github.com/kfb77/vdr-plugin-markad um den Source Code herunterzuladen
  • make all um das Programm zu kompilieren
  • make install um das Programm zu installieren

Beispiel Debian/Ubuntu

cd /usr/src
sudo apt-get install build-essential git pkgconf vdr-dev libavcodec-dev libavformat-dev libavfilter-dev libswresample-dev
sudo git clone git://github.com/kfb77/vdr-plugin-markad
cd vdr-plugin-markad
sudo make all
sudo service vdr stop
sudo make install
sudo service vdr start

Start von markad

markad kann entweder manuell aufgerufen werden oder vom VDR Plugin markad gestartet werden.

Aufruf über das VDR markad Plugin

Empfohlene Konfiguration des markad Plugins in den VDR Einstellungen für den Start von markad aus dem VDR Plugin:

Einstellungen - Plugin 'markad'
Ausführung: danach
verwende VPS: ja
protokolliere VPS Ereignisse: ja
während einer anderen Aufnahme: nein
während einer Wiedergabe: nein
nur Kanäle mit Logo scannen: nein
Herunterfahren verzögern?: ja
OSD Meldung: nein
SVDR Port Nummer: 6419
ausführliches Logging: ja
Log ins Aufnahmeverzeichnis: ja
Hauptmenüeintrag verstecken: nein
extrahiere Logos aus der Aufnahme: aktiviert
vollständige Dekodierung der Aufnahme (WARNUNG: hoher CPU-Verbrauch): ja
Hardware Beschleunigung: Aus

Wenn markad über das VDR markad Plugin vor/nach Aufnahme Ende oder über "svdrpsend PLUG markad mark <Pfad zur Aufnahme>" gestartet wurde, werden im VDR Menu unter "markad Status" alle zur Zeit aktiven markad Prozesse angezeigt. Diese werden dann auch zur Verzögerung des Herunterfahren vom Rechner durch den VDR überwacht. markad Prozesse, die über Befehlszeile oder Skript gestartet wurden, wenn hier nicht angezeigt und nicht überwacht.

manueller Aufruf

Empfohlene Konfiguration des markad Plugins in den VDR Einstellungen für den manuellen Start:

Einstellungen - Plugin 'markad'
Ausführung: nie
verwende VPS: ja
protokolliere VPS Ereignisse: ja

Der Aufruf wird folgenden Parametern empfohlen:

markad --loglevel=3 --log2rec --vps --fulldecode nice <Pfad zur Aufnahme>

weitere Optionen

Kurz Lang Beschreibung
-b --background Lässt markad als Hintergrundprozess laufen
-l --logocachedir Verzeichnis der Vergleichslogos
-p --priority Priorität wenn markad als Hintergrundprozess läuft [20...-20] default: 20
-r --ioprio=<class>[,<level>] I/O-Priorität vom markad Prozess
class 1 = Echtzeit (level 0-7, default level: 4)
class 2 = ausgewogen (level 0-7, default level: 4)
class 3 = Leerlauf (hier gibt es keinen Level)
markad default ist class = 3, also Leerlauf. Die ausgewähle I/O Priorität kann auf dem System nur wirken, wenn ein Diskscheduler verwendet wird, der auch I/O Prioritäten unterstützt (zum Beispiel BFQ). Infos, wie man überprüfen kann welcher Scheduler verwendet wird und wie man diesen ändern kann, gibt es in den Wikis der verwendeten Distribution (zum Beispiel Ubuntu IOSchedulers Wiki). Dieser Wert sollte nicht erhöht werden, da markad sehr I/O intensiv ist und somit andere Anwenung auf dem System beeinträchtigen kann.
-v --verbose erhöht den Log-Level, kann mehrfach angegeben werden
-B --backupmarks Sichert eine vorhandene marks.vdr nach marks0.vdr
-L --extractlogo=[,width,[height]] extrahiert ein Logo von einer Aufnahme ins Aufnahme Verzeichnis
0 = links oben, 1 = rechts oben, 2 = links unten, 3 = rechts unten
(50-480), default 192 (SD) 288 (HD)
(20-250), default 100 (SD) 180 (HD)
-O --OSD Sendet eine OSD-Message an VDR für Start und Ende
-R --log2rec Speichert das Logfile ins Aufnahmeverzeichnis
-T --threads= Anzahl der Threads für libavcodec
max. 16 (default: 1)
-V --version zeigt die markad Versionsnummer
--ac3reencode Re-encode AC3 Ton Spur und reduziere dabei die Lautstärke der Spur. Ziel ist es eine gleichlaute MP2 und AC3 Ton Spur zu erhalten. Erfordert --cut.
--autologo= 0 = benutze nur vorhandene Logos aus dem Logo Cache Verzeichnis
1 = extrahiere Logo aus der Aufnahme, falls nicht möglich, benutze ein vorhandenes Logo im Logo Cache
2 = benutze ein vorhandenes Logo im Logo Cache, falls keines vorhanden, extrahiere Logo aus der Aufnahme und speichere das Logo im Aufnahmeverzeichnis (default)
--cut Schneidet die Aufnahme auf Basis der ermittelten Marken und speichere das Ergebnis in Aufnahmeverzeichnis. Die originale Aufnahme bleibt erhalten.
--smartencode benötigt --cut, frame genauer Schnitt, re-encode Video nur vor/nach den Schnittmarken
--fullencode= Reencode Video, welches --cut erzeugt
all = behalte alle Video und Audio Streams der Aufnahme
best = Nur der beste Video und Audio Stream wird erhalten
--fulldecode Decodiere die Aufnahme vollständig (nicht nur i-Frames) und setze Marken an der exakten Stelle (sonst nur an i-Frame Position). Da inzwischen viele Logo Unterbrechungen sehr kurz sind, ergibt dies deutlich bessere Marken. Die Laufzeit verlängert sich dadurch ca. um den Faktor 4.
--loglevel= Setzt das loglevel auf einen bestimmten Wert
1=error 2=info 3=debug 4=trace
--markfile=<markfilename> setzt einen anderen Namen für die Ausgabedatei der Marken, nur für Testzwecke
--nopid erstellt keine markad.pid Datei im Aufnahmeverzeichnis
--online={1,2}
default is 1
Nur zur internen Verwendung beim Aufruf durch das Plugin. Nicht beim Aufruf durch die Befehlszeile verwendbar.
Wenn dieser Parameter angegeben ist, wird markad bei Aufruf mit cmd=before bereits während der Aufzeichnung gestartet.
Ist --online=2 angegeben, passiert dies bei jeder Aufnahme, sonst nur bei live-Aufnahmen.
Online-Scan startet ca. 10 Sekunden nach Beginn der Aufnahme und wird danach alle 15 Sekunden fortgesetzt.
--svdrphost Zielrechner für OSD-Meldungen. Default: 127.0.0.1
--svdrpport Port für OSD-Meldung. Wird, falls vorhanden, aus der /etc/services gelesen. Sonst default: 2001 bis Version 3.0.24, 6419 ab Version 3.0.25
--hwaccel=<Methode> Methode: vdpau, cuda, vaapi, vulkan, ...
Grundsätzlich ist hier alles möglich, was von der verwendeten FFmpeg Version und der Hardware unterstützt wird.
Liste der Methoden: ffmpeg -hide_banner -hwaccels
Liste der Encoder: ffmpeg -hide_banner -encoders | grep <Methode>
Es müssen die jeweiligen Anforderungen der Methode erfüllt sein:
vdpau: benötigt ein funktionierendes X11 display
vaapi: erfordert Intel GPU, schreibender Zugriff von markad auf /dev/dri/*, für Encoding wird intel-media-va-driver-non-free benötigt
Sollte die verwendete FFmpeg Version oder die Hardware die gewünschte Methode (oder einzelne Codecs) nicht unterstützen, verwendet markad den Software Decoder.
Encoding mit Hardwareunterstützung ist nur möglich, wenn die gesamte Aufnahme in einer TS vorliegt, sonst wird ebenfalls wieder der Software Encoder verwendet.
--perftest führt einen Performance Test durch und schreibt einen Vergleich zwischen Hardware- und Software Decoder in das Log File

Support

Verbesserungsvorschläge, Fragen, Probleme oder Bugs entweder als Issue oder im VDR Portal Forum posten.

Dabei markad mit zumindest folgenden Parameter ausführen:

markad --loglevel=3 --log2rec --vps --fulldecode nice <Pfad zur Aufnahme>

und aus dem Aufnahmeverzeichnis die Dateien markad.log, markad.vps, vps.log, marks und info posten.

Links