AVISynth beschleunigen

  • Hallo zusammen,
    gibt es eine Möglichkeit avisynth zu beschleunigen?? Ich verarbeite Videos in hochauflösenden Formaten (Progressiv) um diese zu DVD's zu konvertieren.


    Alles was ich mache ist:

    Zitat

    DirectShowSource("..\MyVideo.mkv", audio=false, fps=29.970)


    um es anschließend im Procoder zu laden und zu verarbeiten.


    Wie kann ich diesen Vorgang beschleunigen (avisynth ist hier die Bremse)??


    - Das Video unkomprimiert abzuspeichern ist leider keine Lösung, weil viel zu groß!


    Gruß Staubwolke

  • Wie oft haben wir schon gesagt, dass DirectShowSource immer der schlechteste Weg ist, solange es Alternativen gibt?


    Außerdem fehlen:


    1) MediaInfo-Analyse der MKV-Datei
    2) Zitat (CODE / PHP) deines AviSynth-Skriptes


    Sowohl Decoder als auch Filter-Reihenfolge können ausschlaggebend für das Verhältnis zwischen Qualität und Geschwindigkeit sein.

  • Hallo LigH,
    das Script ist vollständig, mehr wird nicht benötigt um das Video in den Procoder zu schieben, sorry!


    Warum mache ich das so? Procoder kann progressives Material nicht korrekt verarbeiten.


    Wen interessieren Filter und Decoder? Das habe ich nicht gefragt!


    Also noch mal, kann man avisynth beschleunigen?


    Weiß das vielleicht jemand?


    Mögliche AW:
    1. Steuervariablen in avisynth, sollten die Profis wissen ob da was geht
    2. mehr Speicher geben, geht das vielleicht (Profis wissen das)
    3. andere Frameserver, vielleicht gibt's das was "Besseres"
    usw.


    gruß staubwolke


  • Wen interessieren Filter und Decoder? Das habe ich nicht gefragt!



    Bessere Filter/Decoder beschleunigen aber Avisynth und danach hast du gefragt....


    Gibt für Multicore Prozessoren Filter, die ich aber nicht nutze, gibt auch bessere Alternativen als Directshowsource, was man eigentlich nie verwenden sollte, wie Ligh schon sagt.


    Avisynth ist selber schon optimal Programmiert, wenn es Beschleunigungen gebe, würden die Entwickler das sicher einbaun und wenn es doch welche gibt, würde es sicher krasse nebenwirkungen haben, sodass es nicht released wird.
    Vielleicht kommt ja irgendwann vollständige Multiprozessor unterstützung.


    Also nimm nicht Directshowsource, sondern z.B. AVCSource, wenn die MKV einen x264/h264 stream enthält oder andere Alternativen.

  • AVCSource würde ich gerne benutzen aber da bekomme ich leider das Problem mit der libavcodec.dll!


    System Vista Business 64bit


    Die Indexerstellung läuft prima, aber sobald ich versuche im avi-script dann mit


    LoadPlugin("C:\dgavcdec102\DGAVCDecode.dll")
    AVCSource("C:\Videobearbeitung\Project.dga")
    AssumeFPS(29.970)


    zu zugreifen, bekomme ich die Fehlermeldung "Couldn't find libavcodec.dll ..." in meinem Script auf Zeile 1


    Keine Ahnung woran das liegt, habe die lib bereits in alle erdenklichen Folders kopiert, hat keine Wirkung, der Fehler kommt immer wieder!


    Ist auch keien spezielles Procoder Problem, mit hcenc bekomme ich genau die gleiche Meldung...


    Hat das schon mal jemand gehabt?

  • Das Problem hier ist anscheinend eher das 64-bit-Betriebssystem, das eben auch lückenloses Vorhandensein von 64-bit-Varianten aller Glieder der Kette in der Videoverarbeitung erfordert (ffdshow in 64 bit, AviSynth in 64 bit, AviSynth-Plugins wie DGAVCDec in 64 bit, ...). Ein 32-bit-Betriebssystem hätte diese Probleme aufgrund der längeren Verbreitung und Verfügbarkeit von Software nicht, 32-bit-DLLs sind lückenlos verfügbar.


    Welche Probleme der ProCoder mit "progressivem Material" haben soll, weiß ich ja nicht. Da aber AviSynth hochoptimiert ist auf die Verarbeitung von YUV-Video, würde ich eher AviSynth eine Beschleunigung zutrauen, wenn so viel Filterung wie möglich in AviSynth passiert, insbesondere das Verkleinern der Bildfläche von HD auf SD, sicherlich auch das intelligente Deinterlacen (wenn nötig), und der ProCoder das fertig gefilterte Material nur noch encodieren muss.

  • Hallo LigH,
    nun, ganz so dramatisch ist es nun auch wieder nicht, da auch 32bit Programme sowie dll's in dem 64bit OS ganz normal laufen. Hier scheint eine besondere Gegebenheit im DGAVCDecode.dll Plugin vorzuliegen bezüglich des Anziehens dieser speziellen dll bzw. der Art und Weise wie die dll hochgezogen wird.


    Alle Programme die ich benutze sind in der großen Menge 32bit Programme und machen hier keine Probleme. Genauso wie procoder oder avisynth oder mux und demuxer oder was auch immer.


    Bisher konnte ich mich über Inkompatibilitäten nicht beschweren. Das System läuft rund mit 4 GB Ram.


    Auch im goggle kann ich bisher nur eine einzige Seite auf Russisch zu diesem Problem finden und das müsste ich mir erst noch aneignen....


    Bleibt also nur in den source code zu schauen um festzustellen was da los ist. Das mach ich dann halt mal...!

  • Zitat

    Procoder kann progressives Material nicht korrekt verarbeiten.



    ganz ehrlich, das ist schlicht und ergreifend falsch !

    Der Procoder kann sehr wohl korrekt progressives Material verarbeiten, was ihm fehlt ist ein Template für die "Assistenten" Arbeiter unter den Benutzern.

    Jenes erstellt man sich am besten selbst -- "New" und schon "verinterlaced" der Procoder den Stream auch nicht mehr.

    Aber das weißt du ja bestimmt , angesichts deines bisherigen Postens ganz bestimmt -- bis in den Source Code brauchst du beim Procoder nicht mal zu schauen, ein Blick ins Handbuch genügt voll und ganz.


    max

  • Hast du die MKV datei mal entpackt den h264 stream geindext und die dga datei in einem skript eingebunden?
    etwa so:

    Code
    1. AVCSource("C:\pfad_zu_dga_datei")
    2. AssumeFPS(29.970)


    und die DGAVCDecode dll in dem Plugin ordner von AviSynth kopiert?
    damit du sie nicht manuell einbinden musst.
    Nimm am besten DGAVCDecode.Dll vom DGAVCIndex ordner.


    wenn du HD2DVD machen willst gibt es ja hier im Board mindestens zwei Tutorials dazu :D


    Wer kämpft, kann verlieren - wer nicht kämpft, hat schon verloren!

  • Hallo LigH,
    nun, ganz so dramatisch ist es nun auch wieder nicht, da auch 32bit Programme sowie dll's in dem 64bit OS ganz normal laufen. Hier scheint eine besondere Gegebenheit im DGAVCDecode.dll Plugin vorzuliegen bezüglich des Anziehens dieser speziellen dll bzw. der Art und Weise wie die dll hochgezogen wird.


    Lies was LigH geschrieben hat nochmal. DASS dein 32-bit-Tool grad funktioniert hat nichts mit einer Filterkette zu tun.


    Hier (Vista Business 64Bit) läuft dgavcdec, weil ich 64bit Filter nicht nutze.


    Von anderen dgavcdec Problemen mal abgesehen.

  • AviSynth macht eigentlich hier nichts anderes als den DirectShow-Filter mit dem aktuell höchsten Merit zu laden und dir dann die unkomprimierten Einzelframes zu schicken (ein Frameserver eben). Viel Optimieren kann man da leider prinzipiell nicht da der Dekoding-Vorgang selbst nicht von Avisynth erledigt wird.


    Die einzige Möglichkeit zur Beschleunigung die ich hier sehe ist also ein schnellerer H.264 (?) Decoder. Der schnellste Software-Dekoder den ich kenne ist CoreAVC (leider kostenpflichtig). Aber auch DivX 7 ist AFAIK schneller als ffdshow bzw. der LibAV-Codec.


    Richtig Speed würde natürlich die Einbindung des Hardware-Dekoders (DXVA) bringen wie ihn alle modernen Grafikchips unabhängig von ihrer Ausbaustufe mitbringen, allerdings gibt es im Moment so weit ich weiß keine Möglichkeit diese in Zusammenspiel mit AviSynth zu nutzen da die fertig entpackten Bilder direkt gerendert werden. Lasse mich aber gerne belehren falls sich hier was geändert haben sollte.


    spyro

  • Da bringe ich mal DGAVCDecNV ins Spiel: Wer eine GeForce 8/9xxx hat, die von CUDA unterstützt wird, der überholt damit sogar DXVA.


    Es müssen nur Nutzungsgebühren für die CUDA-API gezahlt werden, glaube ich...


    klingt interessant. Ich hätte jetzt so eine GeForce 8xxx. Über Google hab ich zu deinem Stichwort DGAVCDecN allerdings nichts gefunden. Wo kann man sich mal schlau machen oder Infos einholen?


    Gruß
    Fisker

  • Also wenn ich das richtig verstanden habe, ist das ähnlich wie der jetzige DGAVCIndex. Dieses Modell läuft dann aber über die Grfikkarte.
    Gehe mal davon aus, dass eine gleiche oder wenistens ähnliche DGA-Datei erstellt wird wie zuvor. Um diese neue DGA nun in meinem Script laden zu können brauch ich die DLL, welche ich im Prinzip ja auch wieder in den "plugins" Ordner von AviSynth stecken könnte. Sollte er dort nicht sein, wird das Plugin einfach importiert.


    frage dahinter allerdings, wird mein Encode dann dadurch deutlich schneller oder liegt die Beschleunigung lediglich in der Erstellung der DGA??
    Wenn ich dadurch deutlich schneller encoden kann, sollten die 15$ nicht das Problem sein.
    Beim letzten grösseren Encode habe ich mit dem HCEnc pro Pass ~3 Stunden benötigt. Eine Zeitersparnix köme mir da grade richtig für grosse Dateien im h.264 Format.


    Gruß
    Fisker

  • Das Indexieren ist ein Klacks. Hier folgt das Programm nur dem Datenstrom und schreibt ab und zu mal heraus, an welcher Position in der Datei sich was befindet. Dazu wird die Grafikkarte nicht benötigt, das läßt sich weder durch DXVA noch durch CUDA beschleunigen -- weil das Video dabei überhaupt nicht decodiert wird. (DGAVCIndexNV.exe wird höchstens zur Vorschau die Beschleunigung nutzen, die hat aber mit AviSynth nichts zu tun.)


    Die eigentliche Beschleunigung wird letztlich das Plugin DGAVCDecodeNV.dll erreichen. Das muss nämlich das Video decodieren, wenn es von AviSynth als Videoquelle verwendet wird. Und zum Decodieren der Frames wird dann die CUDA-Schnittstelle benutzt.


    Die DGA-Datei hilft dann lediglich AviSynth bzw. DGAVCDecode(NV) dabei, für jedes angeforderte Einzelbild schnell herauszufinden, in welcher GOV es sich befindet, und von welchem I- bzw. IDR-Frame bis zum angeforderten Bild hin decodiert werden muss, falls man mal nur einen Ausschnitt in der Mitte des Filmes haben möchte (Trim).


    Wie viel Beschleunigung das ganze dann bringt, und ob das 15 $ wert ist ... vielleicht nicht unbedingt, wenn man mal ab und zu einzelne Videos pro Monat konvertiert. Immerhin wird das nachträgliche Encodieren erheblich mehr Rechenzeit kosten. Also viel mehr als 5-10% Unterschied im gesamten Konvertierprozess würde ich nicht erwarten. Mangels GeForce 8/9 habe ich auch keine praktische Erfahrung.

  • Hmmm, da ich derzeit eine solche GeForce 8800 GTS mit 512MB habe und dies laut Spec. eine geeignete Karte darstellt + die Tatsache, dass ich Spass an der Sache in letzter Zeit gewonnen habe, will ich die 15$ mal ausgeben und das testen.
    10€ gibt man ja nun für alles mögliche mal aus und für so einen Test, ist das sicher nicht viel Geld.
    Wenn ich jetzt noch das Logfile von dem 6h Encode finde, kann ich hier gern mal einen Vergleich posten.


    ;)



    Code
    1. So, wurde vor zwei Tagen "donated" ich warte mal auf meine Lizenz
  • So,


    hab die Lizenz erhalten und mal einen Versuch gestartet.
    Also mit dem DGAVCIndexNV eine dga Datei erstellt und diese genauso, wie die ursprüngliche in mein Script eingebunden:


    Code
    1. setmemorymax(1024)
    2. LoadPlugin("F:\Program Files (x86)\Encode\DGAVCIndexNV\DGAVCDecodeNV.dll")
    3. avcsource("F:\TEMP\4113_NV.dga")
    4. AssumeFPS(25.0)
    5. Spline36Resize(720,432)
    6. RemoveGrain(mode=1)
    7. Sharpen(0.25)
    8. colormatrix()
    9. AddBorders(0,72,0,72)


    leider rührt sich derzeit mein HCEnc überhaupt nicht mehr, wenn ich das so starten will. resultat anschauen mit AvsP funktioniert weiterhin noch.


    Muss also die nächsten Tage mal schauen, was hier evtl. nicht ganz stimmt oder zu verbessern ist.

  • Hab's leider ebenfalls nicht zum Laufen bekommen. AViSynth hat irgendwie Schwierigkeiten mit der Einbindung der DLL, schon AVCSource() funktioniert bei mir nicht.
    Ich dekodiere jetzt wieder mit DirectShowSource(), das funktioniert praktisch immer, ich muss keinen Index erstellen und Qualitätsprobleme hatte ich bei ffdshow/libav bisher auch nicht. :)


    spyro