Memory Leak beim codieren

  • Hi zusammen,

    ich cutte einiges and Videos + Fotos in einem Stream zusammen. Da das Ganze aus vielen Teilen besteht und so auf jeden Fall die 2GB Marke knacken wird, habe ich das Ganze in diverse einzelne Teile aufgeteilt, die dann jeweils Lossless (UT Video Codec) encoded und die Später wieder zusammen gesetzt werden sollen. Öffnen kann ich das .avs erst mal ohne Probleme in VirtualDub. Doch wenn ich's als .avi speichere bekomme ich nach ca. 600 MB diese Fehlermeldung:

    Jemand 'ne Idee ?

    Einmal editiert, zuletzt von may24 (18. August 2014 um 00:05)

  • OS: Win7 64 SP1, Avisynth: 2.6
    Vergiss das Script erst mal... Da wird ziemlich wild durcheinaner Bilder sowie Clips mittels LWLibavVideoSource (L-Smash) geöffnet und zusammengebastelt.
    Ich habe erst mal alle weiteren Filter (dither) rausgenommen ... und trotzdem crashed das Ganze nach ca. 10000 Frames.
    Meine Tests haben aber gezeit das es z.B immer dann auftritt wenn ein Clip (z.B.) zu ende ist und mit dem Nächsten überblendet (Dissolved) wird.

    Nun, nach durchsicht deines verlinkten Forum Entries, glaube ich tatsächlich das es sowas sein könnte. Denn wie Eingangs schon erwähnt, belegt das Script ca. 1GB.
    Wenn das Encoding los geht sieht man im Prozess Hacker das VirtualDub um die 1.4 - 1.5 GB Memory belegt. Und das kommt ziemlich genau dem Fehlerbild nach wie es in Doom9 beschrieben wurde.
    Nur was ist die Lösung ?
    Warscheinlich gibt's keine ... nur das ich das AVS in zwei separate Teile splitte ... :grübeln:
    Auch schau ich mal nach dem "LargeSystemCache" ...

    2 Mal editiert, zuletzt von may24 (18. August 2014 um 10:56)

  • Wenn's am RAM scheitert, wäre das naheliegendste, hier mehr Raum zu schaffen.
    Ist VirtualDub 32 large address aware? Das könnte man ggf. noch reinpatchen, um zumindest auf 4 GB zu kommen. Ansonsten VirtualDub 64 und AviSynth 64/VapourSynth 64. Kommt halt drauf an, ob Du alle Deine Plugins auch als 64 bit-Variante bekommen kannst.

  • Warum gibt es eigentlich Probleme mit Videos >2 GB bei dir?


    ? :huh:
    Vid belegt weit weniger als 2 GB im Speicher ....

    sneaker2: Ich glaub nicht das es an VirtualDub liegt, denn die Fehlermeldung kommt von Avisynth ...

    Alternativ könnte man auch die Threads trennen ... Aber was kann UT420 auf CLI Basis encoden ? FFMPEG ?

  • Da das Ganze aus vielen Teilen besteht und so auf jeden Fall die 2GB Marke knacken wird, habe ich das Ganze in diverse einzelne Teile aufgeteilt

    Das kann ich nicht komplett nachvollziehen. AviSynth wird ja nie das komplette Video in den RAM laden. Aber wenn mehrere Schnipsel zusammengefügt werden, müssen mehrere Decoder-Kopien in den RAM geladen werden, damit ihre Variablen- und Framespeicher voneinander unabhängig bleiben.

  • Das kann ich nicht komplett nachvollziehen. AviSynth wird ja nie das komplette Video in den RAM laden. Aber wenn mehrere Schnipsel zusammengefügt werden, müssen mehrere Decoder-Kopien in den RAM geladen werden, damit ihre Variablen- und Framespeicher voneinander unabhängig bleiben.


    Korrekt, aber wie schon gesagt: Lade ich das .avs, zeigt mir der Process Hacker eine Speicherauslastung von ca. 1 GB an.
    Starte ich dann den Encoding Prozess, geht's rauf bis ca. 1.5 GB

  • @ Groucho2004: Lese bitte nochmal genau meine Beiträge. Die 2GB limit werden nicht erreicht. Und trotzdem kommt eine Access violation.
    Der Process Hacker dated seine Liste leider nur alle 1 sek. ab. Aber ich habe nie gesehen das der wert auch nur annähernd an 2 GB rankommt ...
    Und die kommt von Avisynth und nicht von VirtualDub !

    SetMemoryMax(1000) hat übrigens keinen Effekt

  • Ich glaub nicht das es an VirtualDub liegt, denn die Fehlermeldung kommt von Avisynth ...


    VirtualDub lädt AviSynth, das hängt alles zusammen.

    Zusätzlich zu den vorherigen Tipps kannst Du den Speicherverbrauch vom VirtualDub-Prozess senken, indem Du die externen Encoder nutzt. Wie effektiv das ist, hängt davon ab, wie viel Speicher die jetzigen VfW/ACM-Codecs belegen.

  • Habe mal nachgeschaut, selbst die aktuelle, offizielle Build scheint nicht large address aware zu sein. Habe mal versucht, eine gepatchte Version zu erstellen:
    https://www.mediafire.com/?5wdk1o6wm7c94zz

    Wenn das nicht reicht, auf die externen Encoder wechseln. Sollte auch das nicht reichen zu 64 Bit oder schauen, ob man den Speicherverbrauch anders senken kann. (Z.B. Dateien mit mkvmerge zusammenfügen, damit man weniger Source-Filter braucht.)

    /edit:
    File-Hoster ersetzt.

    Einmal editiert, zuletzt von sneaker2 (18. August 2014 um 21:58)

  • Hm, es läuft erst mal ganz gut ... mal sehen wie lang ;)
    Meist crashed das Ganze um die 10000 Frames herum ...
    Ist trotzdem schon etwas seltsam ... voher wurden für den selben .avs File gerade mal 800 MB (nach laden) veranschlagt und wärend des coden's waren's so um die 1.5 bis 1.6 GB. Jetzt sind's sage und schreibe 2.09 GB. Und das für 'ne 32 Bit App :zunge:

  • Naja, war ja genau das, was wir erwartet haben, also daß die 2 GB-Grenze geknackt wurde. Dein Prozess-Monitor konnte das wohl nicht schnell genug oder korrekt feststellen. Beim Enkodieren steigt der Verbrauch noch mal stark an, je nach Codec. Z.B. x264 kann sich da einiges genehmigen, je nach Einstellung und Auflösung. Wenn es dank VfW auch noch im VirtualDub-Prozess läuft, wird es entsprechend kritisch.

  • Die 2GB limit werden nicht erreicht. Und trotzdem kommt eine Access violation.


    Das ist normal. In extremen Fällen, wenn du viele Clips lädst, kann das schon bei der ersten Memory Allocation von Avisynth passieren, also bevor das erste Frame verarbeitet wird. Man muss sich den Source Code von Avisynth ansehen um zu verstehen, was abläuft. Hier ist ein Thread auf Doom9 wo ähnliche Probleme diskutiert wurden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!