-
Notifications
You must be signed in to change notification settings - Fork 4
Home
- 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.
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
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.
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.
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
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:
Erkennen von Szenen, wo das Senderlogo durch Logos der aktuellen Sendung ersetzt wird. Dies wird dann ignoriert
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.
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.
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.
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.
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".
https//github.com/kfb77/vdr-plugin-markad
Das jeweils aktuelle Tag ist die empfohlene Version für Distributionen oder das selbst gebaute Programm.
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.
Folgende VDR spezifische Distributionen stellen markad zur Verfügung
- yavdr (vdr-plugin-markad-ng: Ubuntu 20.04, Ubuntu 22.04)
- MLD
- VDR4Arch
- easyVDR
Darüber hinaus ist es in folgenden Linux Distributionen enthalten: Debian, Ubuntu und Fedora
Keine
Die Video Festplatte muss mit der Option "noatime" gemounted werden (Eintrag unter /etc/fsttab in der Spalte Options).
- 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
- 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
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
markad kann entweder manuell aufgerufen werden oder vom VDR Plugin markad gestartet werden.
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.
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>
| 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 |
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.