Audio Sync Plugin V1.2 (aka AC3 Lip Sync)

  • ups

    "Diejenigen, die ihre Freiheit zugunsten der Sicherheit aufgeben, werden am Ende keines von beiden haben - und verdienen es auch nicht." Benjamin Franklin

    Einmal editiert, zuletzt von gib64 ()

  • DM800, und ich las das per Downstream auf den eingebauten Boxen meines Panasonic TH-42PZ700E wiedergeben. Angeschlossen über das mitgelieferte DVI-HDMI Kabel.


    cu

    "Diejenigen, die ihre Freiheit zugunsten der Sicherheit aufgeben, werden am Ende keines von beiden haben - und verdienen es auch nicht." Benjamin Franklin

  • Hallo ,


    Hat jemand ausser mir auch das Problem das es beim "normalen" Ton (nicht AC3) ebenfalls einen zeitversatz gibt ? Wenn ja kann man dieses Plugin verbiegen das es auch nicht AC3 synchron zum Schirm bekommt ,oder liege ich daneben ?


    Gruß

    fred_home

  • Ich habe bei meinem Phillips LCD und bei PCM Ton auch einen Zeitversatz. Der ist sogar noch grösser als bei AC3.
    Bei AC3 schreibt Phillips eine Versatz von ca. 200ms, aber leider nichts von PCM (Mpeg) Ton.


    Und ja man kan das AC3 Lip Sync Plugin anpassen, aber egal was ich auch eingestellt habe, es hat nicht gezogen.
    Das einzige was bei mir geholfen hat, ist mit openDBedit-3.0.0 auf dem entsprechendem Sender unter

    Code
    ---------------------
    Delays (in MS):
    Bitstream  PCM
               350
    ---------------------


    einzutragen.


    Bitstream = AC3 Ton
    PCM = Mpeg Ton



    Gruß

  • jetzt mal ne blöde Frage... dieses Lip Sync plugin.. ist das auch nur ein statisches delay von der Tonspur, oder ist es, wie der Name vermuten lässt, dynamisch? also eine wirkliche "Lippen / Ton Synchronisation"(... wie auch immer das funktionieren soll.... )

  • Sebastian: Das Plugin ist statisch.. den LipSync musst Du also selbst "herstellen".


    @trinang: Es gibt auch ein Delay- File für PCM (/proc/stb/audio/audio_delay_pcm). Ich werde mal versuchen, ob sich Manipulationen an diesem genauso auswirken wie Manipulationen am Bitstream- Delay- File


    Wenn sich das als erfolgreich erweist, wird die nächste Version diese Funktion beinhalten...

  • im Hersteller- Forum habe ich das hier schon gepostet, jetzt versuche ich hier mein Glück, vielleicht kann mir ja hier jemand bei der Fertigstellung helfen:


    Die neue Version ist nämlich 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: Update des Plugins im ersten Post

  • hallo tode,


    habe gerade mal die beta hier auf 4.1 probiert


    da crasht irgendwas. ich denke bein aufruf/speichern der lamedb. denn ich hab einmal über das normale pluginmenu aufgerufen - einstellungen gemacht - und beim druck auf speichern(grün)crasht es.


    dann habe ich über das extensionsmenu aufgerufen(laaange blau) - dann crasht es sofort beim auswahl von ac3lipsynk druck auf ok

  • ich werde das heute Abend mal prüfen.


    Also der erste Crash hat was mit den Inhalten der lamedb zu tun: Scheinbar ist da bei Dir irgend ein nicht- UTF8- Zeichen drin. Ich prüf mal, ob das ein 4.1- Problem ist, oder ob das ein Problem ist, was speziall bei Dir auftritt.


    Das zweite Problem ist ein Fehler von mir: Da ist mir eine falsche AC3setup.py ins Paket gerutscht. Ich werde das heute Abend korrigieren.


    Wenn Du zumindest das Setup- Problem selbst beheben willst, dann kannst Du einfach Zeile 69 aus der AC3setup.py löschen (mit einem linux- kompatiblen Editor) und dann Enigma2 neu starten...


    Tode

  • genau das war die Zeile... Ich habe auch den anderen Bug gefixt: Scheinbar ist in der aktuellen Gemini 4.1 ein nicht- ucf8- Zeichen in der lamedb (vielleicht in allen aktuellen cvs- images).


    Ich hatte den Code zum einlesen der lamedb als ucf8 irgendwo abgeschrieben. Da ich aber nicht auf die korrekte Anzeige von zeichen angewiesen bin, kann ich darauf verzichten und habe den code entsprechend geändert. jetzt crasht es auch unter Gemini 4.1 nicht mehr.


    Ich hänge alle folgenden Versionen immer in den ersten Post, sonst wird es so unübersichtlich.


    Da gibt es also jetzt eine Version 20090214-BETA.


    Danke fürs error- reporting.


    Tode

  • Hallo tode,


    habe gerade Dein Plugin installiert. Ist echt super. :)


    Hätte aber noch zwei Verbesserungsvorschläge.


    1.) automatische Auswahl (je nachdem was vom Himmel kommt) von AC3 oder PCM. (schau doch mal wie suomipoeka das macht)


    2.) für Leute die einen Flachen haben (nichs falsches Denken :rot:), haben öfters das Problem das die eine Grundverzögerung von xxx ms haben. Meiner, ein Phillips, hat ca. 200ms Verzögerung. Das ist auch bei Filmen so.
    Es wäre dadurch Vorteilhaft wenn man soetwas schon beim Booten einschalten könnte und trotzdem je nach Sender ein Feintuning in der lamedb von +/- xxxms machen kann.



    Gruß

  • trinanog: Die automatische Auswahl ist eigentlich kein grosses Problem: Man muss sich nur den aktuellen Audio- Channel anschauen, dann kriegt man das schon hin.


    Und die Geschichte mit dem "Automatisch xxxms" könnte man natürlich auch machen, indem man das Plugin beim Systemstart mitstartet, und dort einen "General delay" einstellt. Ich werde mal schauen, was ich für die nächste Version machen kann.


    Aber bevor ich neue Funktionalität angehe, möchte ich erst den Beta- Status der aktuellen Version hinter mich bringen.


    Leider hat mir auf meine Fragen bezüglich des neu einlesens der lamedb noch niemand helfen können...


    Tode

  • muß auch nochmal fragen, denn manchmal stell ich mich doof an


    wenn ich jetzt einen PCM-delay eingestellt habe, gilt der dann auch für den ton am scart? - verzögere ich damit beim "normalen" tv-schauen den ton am tv?
    oder gilt das nur für den opt-ausgang?
    ---
    wo is nochmal der unterschied zwischen dem speichern(grün) und dem schreiben in die lamedb(blau...) ?
    ---
    wenn ich AC3-werte für mein equipment eingestellt und gespeichert hab, sind die dann auch aktiv, wenn ich über die normale audiotaste auf AC3 stelle?
    also so wie quasi vorher mit PAULI


    edit
    wenn ich übers setup fixe min/max werte einstelle. z.b. min 100ms / max 200ms / schrittw. 5ms
    dann ist der gelbe fortschrittsbalken immer 100%. er verändert sich nicht mehr

    gruß Friday :499:


    >>> FixBootVolume <<<


    «Nimm Friday, der macht´s auch mit der Nachbarin.» :grinning_squinting_face:

    Einmal editiert, zuletzt von friday13 ()

  • Zitat

    Original von Tode
    Leider hat mir auf meine Fragen bezüglich des neu einlesens der lamedb noch niemand helfen können...


    Schade, aber ich kann dir leider da nicht weiterhelfen.
    Aber es wäre mal ein Versuch wert, "soumipoeka" anzufragen.
    Der baut sowas grad in seine [v0.91] Enhanced MovieList with VLC stream support (9 available languages) ein, und hat sich etwas an deinem Code bedient. (Schau dir auch mal diesen post an ----> [v0.91] Enhanced MovieList with VLC stream support (9 available languages))
    Er kennt scheinbar Enigma2 schon recht gut, und ist sicher bereit dir da ein paar Tipps zu geben.


    Oder versuche es doch einfach mal im Enigma2 IRC Channel bei den Devs. direkt. (chat.freenode.net:6667 #enigma2)
    Die sind in der Regel recht hilfsbereit, du musst dich einfach nach dem absetzten der Frage gedulden bis einer der Devs. dann mal schnell das Log vom IRC Channel list....wenn du dann noch online bist, bekommst du meist gleich eine Antwort direkt von der Front ;).

  • Zitat

    Leider hat mir auf meine Fragen bezüglich des neu einlesens der lamedb noch niemand helfen können...


    wenn ich mich recht erinnere macht openDBedit-3.0 soetwas über das webif.
    Müsste heute Abend mal schauen wie das Läuft.


    Gruß

  • trinanog


    Du musst nicht extra nachsehen, der Reload der lamedb über das WebIF steht hier beschrieben:http://dream.reichholf.net/wik…ad_lamedb_or_Userbouquets


    Tode will das aber direkt mit eDVBDB.reloadServicelist() machen...


    Tode
    Du könntest auch mal noch 3c5x9 fragen.
    Der grosse Teil vom "alten" WebIF kommt von ihm, und da hat er ja --> DIES <-- drin.
    Komischwerweise hat er da aber db.reloadServicelist() auskommentiert.
    Und doch kann man die lamedb neu laden.....aber ich kenne mich da in python eben nicht aus.... :face_with_rolling_eyes:

  • Vielen Dank für die vielen Tipps.


    Zunächst mal: Das "neuladen" des Audio bei nur einem habe ich mir von suomipoeka abgeschaut. Danke für die Tipps.


    Das mir dem reloadServiceList hatte ich mir ja beim WebInterface abgeschaut... aber das funktioniert nicht. Denn der gepostete XML- Aufruf macht genau das....


    Ich werde mal schauen, ob ich eine der genannten Personen erreiche. AM besten wird es sein, in den IRC zu schauen...


    Jetzt habe ich mit suomipoekas code nur ein Problem: Wenn ich mein Plugin verlasse, wird der Bildschirm schwarz, scheinbar wird das spielen des hier gestarteten Service eingestellt, wenn man das Plugin beendet. Das Problem hat suomipoeka natürlich nicht, weil sein Plugin immer im Hintergrund mitläuft... Das werde ich aber auch noch hinkriegen.


    Tode

  • Tode


    erstmal super plugin, habe bisher per script direkt nach /proc/stb/audio/audio.. geschrieben.
    Jedoch erhalte ich beim aufrufen im Menue "lange blau" und "Hauptmenue" - nicht im "Plugin browser" - folgende Fehlermeldung:


    ...
    [AC3LipSync] fallback to default translation for ms
    [AC3LipSync] fallback to default translation for ms
    [AC3LipSync] fallback to default translation for Bitstream Delay:
    [AC3LipSync] fallback to default translation for
    [AC3LipSync] fallback to default translation for lamedb...
    Looking for embedded skin
    Traceback (most recent call last):
    File "/usr/lib/enigma2/python/mytest.py", line 175, in processDelay
    callback(*retval)
    File "/usr/lib/enigma2/python/Screens/InfoBarGenerics.py", line 1277, in extensionCallback
    answer[1][1]()
    File "/usr/lib/enigma2/python/Tools/BoundFunction.py", line 9, in __call__
    return self.fnc(*self.args + args, **newkwargs)
    File "/usr/lib/enigma2/python/Screens/InfoBarGenerics.py", line 506, in runPlugin
    plugin(session = self.session, servicelist = self.servicelist)
    File "/usr/lib/enigma2/python/Plugins/Extensions/AC3LipSync/plugin.py", line 6, in main
    session.open(AC3main.AC3LipSync)
    File "/usr/lib/enigma2/python/mytest.py", line 284, in open
    dlg = self.current_dialog = self.instantiateDialog(screen, *arguments, **kwargs)
    File "/usr/lib/enigma2/python/mytest.py", line 219, in instantiateDialog
    return self.doInstantiateDialog(screen, arguments, kwargs, self.desktop)
    File "/usr/lib/enigma2/python/mytest.py", line 250, in doInstantiateDialog
    dlg.applySkin()
    File "/usr/lib/enigma2/python/Components/GUISkin.py", line 89, in applySkin
    applyAllAttributes(self.instance, self.desktop, self.skinAttributes, self.scale)
    File "/usr/lib/enigma2/python/skin.py", line 231, in applyAllAttributes
    applySingleAttribute(guiObject, desktop, attrib, value, scale)
    File "/usr/lib/enigma2/python/skin.py", line 189, in applySingleAttribute
    guiObject.setBackgroundColor(parseColor(value))
    File "/usr/lib/enigma2/python/skin.py", line 89, in parseColor
    raise SkinError("color '%s' must be #aarrggbb or valid named color" % (str))
    skin.SkinError: color 'background' must be #aarrggbb or valid named color
    (PyObject_CallObject(<bound method Session.processDelay of <__main__.Session instance at 0x2f3d9d50>>,()) failed)
    9687262ab47c8cd02c0810630b384f7e /usr/lib/enigma2/python/Bp/BPskin.py
    ...


    liegt es an meinem Skin (Nemesis.Blueline.Single.Gemini) ???


    Auch passiert bei mir nichts, wenn ich im PluginBrowser im LipSync-Modul mit gelber Taste die Verzoegerung setzen will. Es wird nichts nach /proc/stb/audio... geschrieben.
    Oder habe ich die Funktion falsch verstanden?

    # DM7025+SS Gemini 4.70; LCD Samsung LE46A656A

  • uups... Das mit der Farbe genannt "background" wird natürlich im Skin definiert... und ich habe den Namen hardcodiert in meinem code drin... werde das korrigieren und die Farbe direkt definieren, damit das auch mit allen Skins funktioniert.


    Werde ich mich heute Abend mal dran machen. Danke fürs Feedback.


    Tode