AC3 Lip Sync Plugin Version 0.7-2009-07-29-r0

  • Ich habe mich mal hingesetzt, und ein AC3 Lip Sync Plugin geschrieben.


    Die jeweils aktuelle Version des Plugins findet Ihr ab sofort hier --> http://dreamboxupdate.com/open…/1.5/dm7025/experimental/
    bzw. dm7025 einfach durch Euren Box- namen ersetzen, sind aber aller Versionen für alle boxen gleich)


    Features
    - Einstellbares Maximales Delay , Bereich geht von -max bis +max
    - Einstellbares Änderungs- Intervall für die Tasten 1/3 (Std. 50ms), 4/6 (Std. 200ms), 7/9(Std. 500ms) und die Pfeiltasten (Std. 5ms)
    - Einstellbares absolutes Delay für die Tasten 2/5/8


    - Umschalten des Delays für AC3 und PCM, negative delays möglich (nur wenn vom Treiber unterstützt, DM7025 scheint noch nicht so weit)
    - Entweder permanentes Speichern des aktuellen Delays in die Lamedb (gilt dann immer für diesen Sender), oder temporäres Speichern bis zum nächsten Umschalten (Taste OK)
    - Speichern des aktuellen Delays über die Menu- Taste auf eine der Tasten 2/5/8.



    Known Bugs:
    - Momentan keine


    Bedienung:
    Das Plugin schreibt einen Setup- Teil ins Plugins- Menu. Hier können die Untergrenze, die Obergrenze und die Schrittweise für die Pfeiltasten festgelegt werden.
    Ausserdem die Schrittweite für die Tasten 1/3,4/6,7/9


    Vorgaben:
    Ober-/Untergrenze: -1000ms +1000ms
    Schrittweite (Pfeiltasten): 5ms
    Schrittweise 1/3: 50ms
    Schrittweise 4/6: 200ms
    Schrittweise 7/9: 500ms


    Taste 0: 0 ms (Lip Sync aus)


    Nach jedem Tastendruck wird die Verzögerung nach dem im Setup einstellbaren Intervall umgestellt, so hört man sofort das Ergebnis. Mit OK wird das Ergebnis dann gespeichert.


    Taste OK/GRÜN: Plugin schliessen (Einstellungen bleiben bis zum enigma2- Neustart oder bis zum delay- wechsel durch den Sender bestehen)
    Taste Abbrechen/ROT: Einstellungen verwerfen (zurück zur Einstellung vor Aufruf des Plugins)


    Gelb: Auswahl der aktuellen Tonspur
    Blau: Speichere aktuelles delay in die lamedb


    Hoch/Runter: Wechseln des Delays zwischen AC3/PCM (die aktuelle Tonspur wird NICHT geändert)


    Menu: Tasten speichern / ändern
    Das Plugin selbst schreibt sich ins Extensions- Menu (Blaue Taste), und kann von dort aufgerufen werden.
    Ausserdem ist das Plugin jetzt im Einstellungs- Menu zu finden, da das Extensions- Menu ja nicht immer verfügbar ist.
    Das delay kann auch für gespeicherte Filme gesetzt werden...


    Jetzt viel Spass mit dem Plugin


    Tode

    • Offizieller Beitrag

    Ich habe mich mal hingesetzt, und ein AC3 Lip Sync Plugin geschrieben.
    ToDos:
    ...
    - Übersetzungen einfügen: Kann mir jemand sagen. wie das geht ?
    ...


    Kann ich.
    Alle zu übersetzenden Texte des Plugins müssen in folgende Form gebracht werden (ein beispiel mit variable):


    Code
    _("Tranlate this text into %s") %variable


    in der __init__.py machst du dann folgendes:



    wobei du PluginLanguageDomain/Path natürlich entsprechend anpassen musst.
    Mit einem tool wie z.B. Poedit kannst du dann ein entsprechend po-file erzeugen indem du ihm den pfad zu den plugin-sourcen gibst und als _() als Übersetzungsfunktion definierst.
    Dieses File ohne Übersetzungs dann einfach als PluginName.pot anbieten, dann kann jeder der will eine Übersetzung erstellen!
    Du brauchst allerdings dann auch noch ein Makefile für die übersetzung der Sprachen ins .mo format:


    siehe: http://schwerkraft.elitedvb.ne…n;cvsroot=enigma2-plugins

  • Klingt ja super! Ich bin zwar der Meinung dass das Video vor Audio ist, aber mit der Delay kann ich das testen, es ist schwierig zu erkennen.


    Ich hab das Programm installiert, das Setup kann ich über das Erweiterungsmenü aufrufen.
    Nur, wie wähle ich die Delay im Fernsehbetrieb, hab die Taste Audio gedrückt, aber mit Pfeiltasten ändert sich nichts, mit den Tasten 1-9 ändert sich nichts, auch die Info über die ms seh ich nicht.
    Gruss

  • @Thunder: ich wollte das eigentlich ins Audio- Menu patchen, aber leider gibt es dafür keinen "sauberen" weg, man müsste dazu die InfoBarGenerics.py verändern, und das wollte ich nicht. Deshalb findest Du das Plugin selbst, wenn Du die Blaue Taste drückst (bei Images mit dem BluePannel halt lange auf Blau).


    Wenn du es dort startest, dann kannst Du mit den Tasten navigieren.


    Reichi: Vielen Dank, das werde ich mir mal ansehen und bei Gelegenheit eine 0.2 mit Sprach- Support machen (alle Texte habe ich schon von Anfang an in _( Klammern ) gesetzt, muss also nur noch die Imports machen...)
    [EDIT]: Ich glaube, es wird Zeit mit meiner Entwicklung vom KlickiBunti- Windows auf meinen Linux- Server zu wechseln und mich mit make, git, usw auseinanderzusetzen... Ein Kleiner Schritt für die (Linux)- Menschheit, ein Riesenschritt für mich :winking_face:


    @All: Welche Features würdet Ihr Euch denn wünschen ?


    Ich persönlich habe mir mal für das nächste Release (sobald mich meine Frau nicht mehr so böse ankuckt, weil ich ständig die Dreambox boote) folgende Features überlegt.
    Ob die das allerdings ins Release schaffen hängt von meiner Geduld und Python ab:


    1. Auswahl, ob Zahlentasten mit festen Sprüngen belegt werden sollen, oder mit anpassbaren Werten: Dann kann man sich zum Beispiel für ARD den optimalen Wert einstellen, und diesen dann auf der Taste 1 speichern...
    2. In diesem Zusammenhang: Aufruf des Setup- Bildschirms aus dem Plugin selbst (per menu- Taste), um die Min / Max- Werte und die Sprungmarken zu setzen


    Noch ne Frage an die Profis: Wo genau finde ich die Definition der ganzen "Actions":
    OKCancelActions, WizardActions, SetupActions, NumberActions...
    woher weiss ich, welche Tasten bei welcher Action "belegt" sind...


    Gruss
    Tode

    2 Mal editiert, zuletzt von Tode ()

  • Danke für die Info, Blaue Taste lange, dann das Plugin wählen und schon sieht man den orangen Balken :smiling_face:
    Funktioniert auf der DM800, ist zwar bestimmt nicht für den AC3-Downmix gedacht, ich experimentiere trotzdem weil mich der Versatz stört.


    Eins is mit augefallen, als ichs probiert hab, hats auf die Englische AC3 umgeschalten.
    Hast du das gelesen: http://www.dream-multimedia-tv…hp?postid=55473#post55473
    Die Delay-Info, vielleicht könnte man die für Debug-Zwecke mit Einblenden oder sie mit ner Taste setzen, so könnte man Testen ob die Info generell was bringt, eine Offset braucht oder nutzos ist.


    Wäre gut möglich das Delay-Info (eventuell +/- Offset durch Hardware bedingt) ne brauchbare oder gute Einstellung bringt...

    Einmal editiert, zuletzt von ThunderZ ()

  • @Thunder: Da die 7025 keinen AC3 Downmix kann, werde ich Dir wahrscheinlich hier nicht weiterhelfen können (der "FamilienFinanzminister" hat die 999€ für die 8000er noch nicht genehmigt)


    Wo genau die Informationen in dem von Dir genannten Post herkommen weiss ich leider auch nicht. Wenn Du herausfindest, welche py man anzapfen muss, um an diese Information zu kommen, kann ich gerne mal das ganze als Information mit anzeigen...


    Reichi: Nochmal danke wegen der Übersetzung, auch wenn Du die ein oder andere "Stolperfalle" für nen Anfänger wie mich eingebaut hast...
    Falls jemand zufällig auf diesen Thread stösst mit der Frage nach Übersetzungen:


    1. In Reichis Beispiel fehlt die Deklarationszeile für resolveFilename und SCOPE_PLUGINS. Die muss so lauten:

    Python
    from Tools.Directories import resolveFilename, SCOPE_PLUGINS


    2. Es fehlt auch der kleine aber entscheidende Hinweis, dass man die neu definierte "_" - Funktion im plugin.py auch bekannt machen muss:

    Python
    from __init__ import _


    Aber sonst klappt es gut... siehe übersetzte Version 0.2 + AC3LipSync.pot (für fleissige Übersetzer) im ersten Post.


    Gruss
    Tode

  • Du brauchst Dich nicht zu bessern... Hilfe zur Selbsthilfe: Das ist es, was ein Forum liefern soll, und das machst Du hervorragend...


    Wenn ich eine ordentliche Python- Umgebung verwenden würde, und meinen Code nicht im Notepad++ zusammenhacken würde, dann hätte ich das ja nicht mal speichern können...
    So hatte ich halt ein paar Abstürze der Dreambox... zum Glück sagen einem die Crashlogs immer schön, was man falsch gemacht hat...


    Also: Lerneffekt war da, das ganze läuft ja auch.. Danke Dir !


    Tode

  • danke Dir... habs mir grade mal installiert... bezüglich meiner Frage zu den "Actions"- Definitionen... RTFM..... ich hätte mir die Wiki durchlesen sollen, dann hätte ich den Verweis auf die keymap.xml gefunden...


    Gruss
    Tode

  • "Wo genau die Informationen in dem von Dir genannten Post herkommen
    weiss ich leider auch nicht. Wenn Du herausfindest, welche py man
    anzapfen muss, um an diese Information zu kommen, kann ich gerne mal
    das ganze als Information mit anzeigen..."
    Vielleicht meldet sich Homey zu Wort, er konnte die Videodelay anzeigen, vielleicht weiß er auch wo man sie abgreifen kann.


    Ich teste es trotz downmix, dort wo AC3 gewählt ist, wirken die Änderungen auch über Downmix, also geht es.
    Die Frage ist, ob der Versatz Ton vor Audio ist, das Versuch ich grad zu testen, um es perfekt zu sehen braucht man einen nicht nachvertonten Inhalt, darauf war ich nun (Nachrichten).
    Gruss

  • Die delays funktionieren (soviel ich weiss) auch in Aufnahmen... Also eventuell kannst Du ja einfach die Nachrichten aufnehmen, dann kannst Du das so oft spielen, bis Deine delays passen...


    Gruss
    Tode

  • Die Infos stammen aus dem Opensource Tool MediaInfo (http://mediainfo.sourceforge.net/de), also nicht über eine py verfügbar.
    Wenn man damit ein .ts öffnet werden unter anderem Infos des AudioStreams ausgegeben


    Leider kann man beim Abspielen der Aufnahme das Plugin nicht starten.

  • ok. Danke für die Infos ThunderZ.


    Dass das Audio- Delay auch beim abspielen klappt, werde ich versuchen einzubauen (dafür muss ich das auch noch dort in ein Menu legen... ich hoffe, das klappt..)
    Die Geschichte mit dem Umschalten auf eine andere Audio- Spur werde ich auch in der nächsten Version beheben (das kommt davon, wenn man code kopiert, ohne ihn zu verstehen...)


    Aber ich weiss nicht, wann ich an die Weiterentwicklung gehen kann... Muss mir erstmal eine Umgebung schaffen, die "professionelles" Entwickeln ermöglicht...


    Gruss
    Tode

  • Bezüglich des Aufnahmeproblems... könnte man den Eintrag im Bluepanel nicht auch über das normale menu Aufrufen?
    Also dort wo man die Settings zu diesem Plugin macht.
    Das Problem ist, das bei Aufnahmen das Bluepanel bei mir nicht verfügbar ist :-/

  • Bezüglich des Aufnahmeproblems... könnte man den Eintrag im Bluepanel nicht auch über das normale menu Aufrufen?
    Also dort wo man die Settings zu diesem Plugin macht.
    Das Problem ist, das bei Aufnahmen das Bluepanel bei mir nicht verfügbar ist :-/


    In diesem Board gibt es kein Bluepanel.

    cu


    floh

  • die neue Version ist fertig, aber ich kriege eine Sache nicht gebacken:


    Ich kann inzwischen die Lamedb auslesen. Ich kann sogar Werte reinschreiben.
    Und eigentlich sollte über eDVBDB.reloadServicelist() laut Quellcode die lamedb neu eingelesen werden und die Änderungen in den Speicher übernommen werden.


    Leider tut der Befehl scheinbar gar nichts... wenn man die Console verfolgt, sagt er, er hätte die lamedb erfolgreich neu eingelesen, sobald man aber eDVBDB.saveServiceList() aufruft oder Enigma neu startet, werden
    alle Änderungen wieder überschrieben.


    Hat Irgendjemand eine Idee, was ich da tun könnte ?
    Hier mal ein Beta- Kit des aktuellen Entwicklungsstandes. Der Fragliche Code ist in der AC3lamedb...


    Thanx
    Tode


    FEATURES:
    - Plugin erscheint nun an 3 Stellen:
    - Im Plugin- Menu: Setup- Modul
    - Im Einstellungs- Menu und im Extensions- Menu: Das eigentliche Plugin
    - Sowohl Bitstream (=AC3) als auch PCM (=MPEG) können verzögert werden
    - Die Werte aus der lamedb für den aktuellen Kanal werden angezeigt. Über die blaue Taste wird man später die aktuell eingestellten Werte zurückspeichern können: Der code ist schon komplett, nur klappt wie erwähnt das reload der Serviceliste noch nicht, so dass die Einstellungen nicht effektiv werden
    - Neues Interface:
    Pfeiltasten links , rechts und Zifferntasten setzen die aktuell selektierte Verzögerung (mit orangener Farbe markiert)
    Pfeiltasten hoch / runter wechseln zwischen Bitstream und PCM Delay
    BEKANNTE FEHLER / SUBOPTIMALES:
    - Hat ein Kanal nur einen Audio- Kanal, dann wird die Änderung des Delays erst durch umschalten aktiv. Ein Wechseln auf den selben AudioKanal via self.audioTracks.selectTrack(1) tut leider nichts. Vielleicht hat ja hier jemand einen Tipp, wie man das Audio "reloaden" kann, wenn man nicht kurz auf einen anderen Audio- Kanal wechselt...


    - lamedb- Operationen tun momentan nur zum Schein


    - Das Laden des Plugins geht einige Sekunden, das ist die Zeit in der die Lamedb ausgelesen wird. Eventuell kann ich mir hier mit eDVBDB irgendwie helfen, aber hier fehlt mir noch ein Ansatz.


    - Der Screen passt optisch zum GlassLine, vermutlich passt aber die Farbgebung und so nicht gut in andere Plugins. Hier bräuchte ich noch den ein oder anderen Tipp der Skinner, wie man sowas "individualer" macht


    EDIT: Ich hatte da eine falsche AC3setup eingepackt. Hier jetzt die richtige Version. Ausserdem kam es zum Absturz bei einem speziellen aktuellen Image wegen ungültigen utf-8 Zeichen in der lamedb. Das habe ich auch gleich behoben.

  • There seems to be a couple of issues with the lamedb operations:



    Code
    Traceback (most recent call last):
      File "/usr/lib/enigma2/python/mytest.py", line 175, in processDelay
    	callback(*retval)
      File "/usr/lib/enigma2/python/Plugins/Extensions/AC3LipSync/AC3main.py", line 271, in DoSaveLamedb
    	sResponse = sResponse + sNewLine + _("Saved PCM value: ") + str(self.lamedb.getNamedServiceParameter(self.currentServiceRef,"DelayPCM",True))
      File "/usr/lib/enigma2/python/Plugins/Extensions/AC3LipSync/AC3lamedb.py", line 190, in getNamedServiceParameter
    	return hex2dec(self.serviceList[sService].NamedParameters[sParameterName])
    KeyError: '41'
    (PyObject_CallObject(<bound method Session.processDelay of <__main__.Session instance at 0x2ee34760>>,()) failed)