Mehrere MTS-Dateien über AVS öffnen...Absturz mit Virtualdub

  • Hi !


    Mal eine Frage an die Gemeinde:


    Wenn ich mit AVISynth mehrere MTS-Dateien als Input öffne (also ganz normal mit directshowsource() oder auch DSS2() ), stürzt mir Virtualdub beim Anzeigen der AVS-Datei immer mit "Memory overflow" ab!?!


    Da reichen schon 7 oder 8 MTS-Dateien, dann geht es nicht mehr?


    Hat / hatte das noch jemand von Euch?
    Woran könnte das liegen?


    Grüße,

  • Mit DirectShowSource? Haben denn alle nativen AviSynth-Source-Plugins schon versagt, dass du zum letzten Mittel greifen musst? ... ;) — Mal abgesehen davon, dass ein DriectShow-Filtergraph nicht in jedem Zusammenhang ganz zuverlässig framegenau arbeitet, und eventuell auch noch unerwünschte Filter eingefügt werden (z.B. unnötige Deinterlacer), hat das wahrscheinlich noch einen weiteren Nachteil:


    Wenn mehrere Clips geöffnet werden, dann wird wahrscheinlich auch für jeden Clip eine Kopie des DirectShow-Filtergraphen in den RAM geladen, wenn du DirectShow-Quellfilter verwendest. Bei nativen Decoderfiltern für AviSynth (FFMS2, L-SMASH Works, DGDecNV/DGDecIM) könnte das für den Speicherbedarf günstiger sein, was aber zu testen wäre...


    Gehören die MTS-Dateien zu einer BD-Playliste (mpls)? Dann wäre vielleicht ein DGDec*-Plugin geeigneter (leider unterstützen weder FFMS2 noch L-SMASH Works solche Playlisten). Oder man verbindet die Dateien vorher physisch. Aber es gibt sicherlich auch Situationen, in denen man doch die Clips zunächst einzeln laden muss.


    Wenn du AviSynth+ in Betracht ziehst, hättest du auch den Vorteil, dass du mit einem 64-bit-Prozess arbeiten kannst, der mehr RAM verwenden kann; mittlerweile sind schon sehr viele Plugins auf 64-bit-Code und Kompatibilität mit dem Multithreading von AviSynth+ portiert worden. Die Verwendbarkeit hängt allerdings auch vom gewünschten Encoder ab; u.U. helfen MeGUI oder StaxRip in deren 64-bit-Versionen bei der Versorgung der Encoder mit der Skriptausgabe auch von einem 64-bit-AviSynth+.


    Für bessere Hilfe brauchen wir aber deutlich mehr Informationen, z.B. dein kompletter Skriptinhalt sowie die Ausgabe von AVSMeter (dieses Programm zeigt häufig noch ein paar nützliche Dinge an, auch wenn das Skript dann irgendwann AviSynth zum Absturz bringt).

  • Danke für die Rückfragen, hier die Antworten:


    > Wahrscheinlich ist Dein System mit der Datenmenge überfordert. 32 bit System??


    64-Bit-System (win7), aber 32-Bit-Virtualdub, 32-Bit-AVISynth.


    64-Bit-AVISynth lief zusammen mit 64-Bit-Virtualdub nicht. :-/


    Es handelt sich um das gleiche System wie ich in diesem Thread seinerzeit schon mal beschrieben
    hatte:


    http://forum.gleitz.info/showthread.php?47282


    Nur jetzt mit WIN 7!



    > Teste mal folgende VirtualDub-Version: https://www.mediafire.com/?5wdk1o6wm7c94zz


    Was kann die, was die "offizielle" nicht kann?



    > Wenn das nicht reicht: pipen (z.B. avs2pipemod).


    OK, kenn ich noch nicht. Muss ich ausprobieren.



    > Wenn auch das nicht reicht: MTS-Dateien vorher zusammenfügen, dann in AviSynth öffnen,


    Das ist mein derzeitiger Workaround, der aber immer nen Haufen Plattenplatz frisst, weil
    man ja die Originaldateien von der Kamera nicht einfach weglöschen möchte.


    > oder AviSynth 64 bit.


    s.o., läuft nicht.


    > Mit DirectShowSource? Haben denn alle nativen AviSynth-Source-Plugins schon versagt,
    > dass du zum letzten Mittel greifen musst? ... ;)


    Jepp. War seinerzeit alles auf meinem Rechner nicht lauffähig: http://forum.gleitz.info/showthread.php?47282


    > Mal abgesehen davon, dass ein DriectShow-Filtergraph nicht in jedem Zusammenhang ganz zuverlässig
    > framegenau arbeitet, und eventuell auch noch unerwünschte Filter eingefügt werden [...]


    Genaugenommen verwende ich Directshowsource nur zum herausholen des Tons. Der Video-Output wird mit
    DSS2MOD generiert, siehe auch wieder dort: http://forum.gleitz.info/showthread.php?47282, letzte Seite.


    > Wenn mehrere Clips geöffnet werden, dann wird wahrscheinlich auch für jeden Clip eine Kopie des
    > DirectShow-Filtergraphen in den RAM geladen, [...]


    16GB RAM. Kann es damit auch noch Probleme geben?


    > Gehören die MTS-Dateien zu einer BD-Playliste (mpls)?


    Es sind 2GB-Einzeldateien einer Videokamera (das übliche Gesplitte wegen FAT32 auf der Speicherkarte).


    > Für bessere Hilfe brauchen wir aber deutlich mehr Informationen, z.B. dein kompletter
    > Skriptinhalt sowie die Ausgabe von AVSMeter (dieses Programm zeigt häufig noch ein
    > paar nützliche Dinge an, auch wenn das Skript dann irgendwann AviSynth zum Absturz


    Stimmt:


    WIN7(!)-Rechner mit
    - Avisynth 2.60
    - VirtualDub 1.10.4
    - ffdshow (Version von 2015 unverändert)
    - DSS2MOD (letzte Version hier aus dem Forum)


    Script kann man letztlich abspecken auf:


    [...]
    video1=DSS2("c:\originaldateien\00001.mts",preroll=15)
    video2=DSS2("c:\originaldateien\00002.mts",preroll=15)
    video3=DSS2("c:\originaldateien\00003.mts",preroll=15)
    video4=DSS2("c:\originaldateien\00004.mts",preroll=15)
    video5=DSS2("c:\originaldateien\00005.mts",preroll=15)
    video6=DSS2("c:\originaldateien\00006.mts",preroll=15)
    video7=DSS2("c:\originaldateien\00007.mts",preroll=15)
    video8=DSS2("c:\originaldateien\00008.mts",preroll=15)
    video9=DSS2("c:\originaldateien\00009.mts",preroll=15)
    gesamt=video1+video2+video3+video4+video5+video6+video7+video8+video9
    [...]


    (siehe hier http://forum.gleitz.info/showt…314&viewfull=1#post452314)


    Das gleiche mit Directshowsource(). Es hängt nur daran, wie viele Einzeldateien man aufmacht.


    Das oben wäre jetzt die AVISynth-Zusammenfügung für EINE Kamera. Wenn man zwei oder drei hat, wird es auf jeden Fall zu viel.


    Grüße,
    Andreas

  • 16GB RAM. Kann es damit auch noch Probleme geben?


    Nur, dass ein 32-bit-Prozess davon maximal 2 GB benutzen kann (abgesehen von Ausnahmen in speziellen Fällen).


    Wieviel davon AviSynth selbst maximal belegt, kann man noch mit SetMemoryMax() beeinflussen. Wenn man es nicht verwendet, beschränkt sich AviSynth auf 1/4 der 2 GB, also 512 MB. Vielleicht kannst du hier noch ein wenig experimentieren. Aber bleibe besser deutlich unter den theoretischen 2048 MB.


    Es sind 2GB-Einzeldateien einer Videokamera (das übliche Gesplitte wegen FAT32 auf der Speicherkarte).


    Dann sollte man doch eher vermeiden, die Segmente einzeln zu öffnen, weil außer dem ersten alle folgenden Segmente sonstwo gesplittet sein könnten, eventuell mitten in einer GOP oder gar mitten in einem Videoframe, und dann fehlt was beim Decodieren.


    Hier sollte man also unbedingt eine Methode finden, die alle MTS-Stückchen fortlaufend wie eine einzige Datei verarbeiten kann. Physisch zusammenfügen ist da noch die sicherste Methode. Ich finde es höchst ärgerlich, dass FFMS2 und L-SMASH Works hier nichts ausrichten, die Verarbeitung einer MPLS wäre in solchen Fällen wirklich nützlich... Wenn du DGDecNV (DGIndexNV.exe) verwenden kannst, könntest du versuchen, alle MTS-Segmente als Gruppe zu öffnen, so wie damals alle VOB-Segmente in DGMPGDec (DGIndex.exe).

  • Hi !


    > Nur, dass ein 32-bit-Prozess davon maximal 2 GB benutzen kann [...]


    Oha. Da Virtualdub auch nur als 32-Bit-Version läuft, ist es für mich damit schon verständlicher
    dass Virtualdub dann mit der Fehlermeldung "we have run out of memory" (o.ä.) aussteigt.


    > Wieviel davon AviSynth selbst maximal belegt, kann man noch mit SetMemoryMax() beeinflussen.
    > Wenn man es nicht verwendet, beschränkt sich AviSynth auf 1/4 der 2 GB, also 512 MB.
    > Vielleicht kannst du hier noch ein wenig experimentieren.
    > Aber bleibe besser deutlich unter den theoretischen 2048 MB.


    Werde ich testen! Danke für den Tipp!


    > Dann sollte man doch eher vermeiden, die Segmente einzeln zu öffnen, weil außer dem ersten
    > alle folgenden Segmente sonstwo gesplittet sein könnten, eventuell mitten in einer GOP oder
    > gar mitten in einem Videoframe, und dann fehlt was beim Decodieren.


    Also man kann Segmente der Kamera mit copy /b [...] zusammenfügen
    und erhält ein flüssig laufendes Video, das auch die korrekte (Zeit im Player
    o.ä.) anzeigt - also keine "echten Einzel-MPEGs".


    Auch mit AVISynth kann man sie in der o.g. Weise einzeln laden und mit "+" zusammenfügen,
    ohne dass es Ruckler, Aussetzer, fehlende Frames o.ä. gibt - alles korrekt und flüssig.


    Die einzelnen Dateien sind immer leicht unterschiedlich groß (also nicht wie bei VOBs einer DVD, die
    hart nach Bytes geschnitten werden).


    Daraus schließe ich, daß die Kamera-SW tatsächlich noch die komplette GOP schreibt und dann
    erst die nächste Datei aufmacht (?).


    Insofern würde es mit der genannten Methode schon gehen, wenn man genügend Files
    aufbekommen würde.


    Grüße,
    Andreas



    Hier sollte man also unbedingt eine Methode finden, die alle MTS-Stückchen fortlaufend wie eine einzige Datei verarbeiten kann. Physisch zusammenfügen ist da noch die sicherste Methode. Ich finde es höchst ärgerlich, dass FFMS2 und L-SMASH Works hier nichts ausrichten, die Verarbeitung einer MPLS wäre in solchen Fällen wirklich nützlich... Wenn du DGDecNV (DGIndexNV.exe) verwenden kannst, könntest du versuchen, alle MTS-Segmente als Gruppe zu öffnen, so wie damals alle VOB-Segmente in DGMPGDec (DGIndex.exe).[/QUOTE]

  • Wahrscheinlich ist Dein System mit der Datenmenge überfordert. 32 bit System??


    Grüße Thomas


    Nochmal hierzu:


    Die Datenmenge ansich ist wohl nicht das Problem:


    Wenn ich von drei Kameras jeweils 5 bis 8 solche 2GB-Schnipsel zusammenfüge (copy /b) und mit
    den drei dabei herauskommenden richtig fetten Gesamt-MTS-Dateien arbeite (jede über 10GB groß),
    geht alles prima.

    Sind dann eben nur 3 Files, im anderen Fall 15-24.


    Schnittmäßig mache ich keine Spielereien, hauptsächlich dissolve() und natürlich fadein/out(), trim(), audiodub() usw.
    Müßte sich alles von Avisynth schön linear nacheinander abarbeiten lassen. Weiß das Programm natürlich nicht und muß doch alle Dateien erst mal aufmachen. :-)


    Grüße,
    Andreas

  • Andreas
    All diese Probleme und endlose Forum-Threads könntest du vermeiden wenn du 64 Bit Avisynth/VDub benutzt. "läuft nicht" ist wenig hilfreich bei der Fehlersuche. Versuch mal Avisynth 64 Bit mit dem "Avisynth Universal Installer" zu installieren.


    Vorher empfehle ich eine gründliche Reinigung:


    - "C:\Programme (x86)\AviSynth*" und Unterverzeichnisse löschen
    - Lösche diese Registrierungsschlüssel (registry keys)
    HKEY_CURRENT_USER\Software\Avisynth
    HKEY_LOCAL_MACHINE\SOFTWARE\Avisynth
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Avisynth


    Solltest du dann immer noch Probleme haben kann AVSMeter weiterhelfen (AVSMeter -avsinfo").

  • Nochmal hierzu:


    Die Datenmenge ansich ist wohl nicht das Problem:


    Um das wirklich beurteilen zu können, müsste man in die Internas von AviSynth einsteigen. Beim Zusammenfügen einzelner Clips kann ich mir aber durchaus vorstellen, dass hierfür zusätzlicher Speicher benötigt wird, bzw. das ein großes Video am Stück besser funktioniert, eben weil nichts mehr zusammengefügt werden muss.



    Nochmal hierzu:


    Wenn ich von drei Kameras jeweils 5 bis 8 solche 2GB-Schnipsel zusammenfüge (copy /b) und mit
    den drei dabei herauskommenden richtig fetten Gesamt-MTS-Dateien arbeite (jede über 10GB groß),
    geht alles prima.


    Pragmatisch gesehen hast Du hier doch Deine Lösung. Alles Weitere ist sicher auch ein interessanter Aspekt (wie Ligh erwähnt hat, kann es ja sein, dass man mit einzelnen Schnipseln anders umgehen möchte), aber nach Deinen Aussagen planst Du nur einfache Aktionen, die das einzelne verarbeiten der Teilstücke nicht erfordern. Nach meinem Wissen erfolgt das Zusammenfügen mit dem copy-Befahl auch verlustlos, so dass nichts gegen diese Methode spricht.



    Grüße Thomas

  • AviSynth decodiert. Immer. Was zusammengefügt wird, sind also immer Clips, die decodierten Inhalt repräsentieren. Und wenn man es genau nimmt, wird gar nichts wirklich "zusammengefügt": Für jedes Frame der Ausgabe aus AviSynth heraus wird nur zugeordnet, aus welchem der vielen offenen Clips ein Frame angefordert wird.


    Leider werden dazu aber erst mal alle Clips geöffnet, auch die, die in dem Moment noch längst nicht benötigt werden. Und für jeden dieser Clips wird zusätzlich noch mal ein Puffer von je 15 Frames durch den preroll-Parameter in DSS2 reserviert: Der mag für das Konvertieren, aber noch mehr für das zufällige Anschauen eines Clips nützlich sein; wenn man jedoch sehr viele Clips in der selben Skript-Umgebung offen hat, dann wird für jeden Clip ein solcher Puffer reserviert, und das verbraucht RAM. Und wenn eigentlich nur das Video von Anfang bis Ende durchgereicht wird, ohne dass es im Skript Filter gibt, die einen großen temporalen Radius haben (also weit in Vergangenheit und Zukunft jedes aktuell verarbeiteten Frames schauen müssen), dann braucht man so einen großen Preroll vielleicht gar nicht.

  • Um das wirklich beurteilen zu können, müsste man in die Internas von AviSynth einsteigen. Beim Zusammenfügen einzelner Clips kann ich mir aber durchaus vorstellen, dass hierfür zusätzlicher Speicher benötigt wird, bzw. das ein großes Video am Stück besser funktioniert, eben weil nichts mehr zusammengefügt werden muss.

    Ein grosser Teil des Speichers wird wahrscheinlich auch von den zahlreichen Instanzen von ffdshow benötigt. LAV Filters wäre hier wahrscheinlich besser (abgesehen von ffms2/lsmash die eindeutig vorzuziehen sind).


    Die beste Lösung ist sicher DGDecNV. Ansonsten 64 Bit Workflow und/oder zusammenfügen der einzelnen Segmente.

  • Leider werden dazu aber erst mal alle Clips geöffnet, auch die, die in dem Moment noch längst nicht benötigt werden. Und für jeden dieser Clips wird zusätzlich noch mal ein Puffer von je 15 Frames durch den preroll-Parameter in DSS2 reserviert: Der mag für das Konvertieren, aber noch mehr für das zufällige Anschauen eines Clips nützlich sein; wenn man jedoch sehr viele Clips in der selben Skript-Umgebung offen hat, dann wird für jeden Clip ein solcher Puffer reserviert, und das verbraucht RAM. Und wenn eigentlich nur das Video von Anfang bis Ende durchgereicht wird, ohne dass es im Skript Filter gibt, die einen großen temporalen Radius haben (also weit in Vergangenheit und Zukunft jedes aktuell verarbeiteten Frames schauen müssen), dann braucht man so einen großen Preroll vielleicht gar nicht.

    Hab' ich gerade mal getestet, "preroll=0", "seekthr=0" und "cache=0" machen kaum einen Unterschied.

  • Zitat

    64-Bit-AVISynth lief zusammen mit 64-Bit-Virtualdub nicht. :-/


    Ich muß das korrigieren:


    > AVISynth 2.6.0 lief zusammen mit Virtualdub 1.10.4 AMD-64 nicht. :-/


    Ich nahm an, von AVISynth 2.6.0 hätte ich eine 64-Bit-Version installiert. Das kann aber nicht sein, weil es gar keine gibt (?!): Siehe hier: http://avisynth.nl/index.php/Main_Page


    Muß ich also mit Virtualdub 1.10.4/64-Bit dann die AVISynth 2.5.8-64-Bit verwenden?


    Grüße,
    Andreas

  • Für 64 bit brauchst du avisynth+ 2.5.0.8, wenn du als Einsteiger Dinge wie QTGMC zum laufen bringen willst hast du einige Hürden zu überwinden, angefangen mit der avisynth Installation da der aktuelle AviSynth Entwickler keine Installer bereitstellt, ein Installer bekommst du über groucho2004's avisynth switcher oder über staxrip 1.6.1.1, das sind die einzigen Quellen die ich kenne.