Was spricht eigentlich dagegen die einzelnen kurzen Clips erst zu joinen und danach ein File nach Avisynth zu laden?
Festplattenplatzmangel?
![](https://gleitz.info/images/avatars/11/1617-115c5c3eab6914da388f2d552cb0aba28eb79240.jpg)
viele kleine MPEG2 Dateien in einem Video
-
-
Das hab ich ja vor, indem ich das Video erst als utvideo AVI speichere und dann in MeGUI lade. Wenn der 32bit Quatsch keine Probleme machen würde, könnte ich es ja direkt in MeGUI laden. Das wäre natürlich super!
Aber um es in VirtualDub zu laden, muss ich doch auch ein AVISynth Script erstellen... oder nicht? -
Meine eigentlich eine große MOV ohne Neukodierung von Video und Audio.
Alle Clips einfach Z.B in MPEG Streamclip öffnen (werden alphabetisch nach Namen sortiert angeordnet) und mit "save as" als ein großes MOV gespeichert. -
Es ist ja nicht so, dass alle MOVs in den RAM geladen werden. Eher, dass FFMS2 als Decoder so oft in Kopie geladen wird, inklusive ein paar Frames als Puffer.
-
MPEG Streamclip beschwert sich beim starten, dass kein Quicktime installiert ist.
-
Jetzt würde mich mal interessieren wenn man doch MT aktiviert und die SetMemoryMax meinetwegen auf 512 oder 768MB beschränkt. Egal ob 32 oder 64bit System
-
Also mit VirtualDub 64bit bekomme ich die 33 MOVs (und hoffentlich auch mehr!) gut als eine große AVI Datei gespeichert. Zum Glück meckert das Programm nur beim abspielen, nicht beim speichern rum.
Mir ist aufgefallen, dass die MOV Dateien mit einem + auch asynchron werden. Der Effekt fällt aber erst weiter hinten stärker auf. Lässt sich aber auch mit ++ beheben. Das nur am Rande.Propaganda
Meinst du so?
SetMTmode(2,0)
SetMemoryMax(768)
Das funktioniert auch nicht. -
Mir ist aufgefallen, dass die MOV Dateien mit einem + auch asynchron werden. Der Effekt fällt aber erst weiter hinten stärker auf. Lässt sich aber auch mit ++ beheben. Das nur am Rande.
Genau darum geht es ja bei dem Unterschied zwischen UnalignedSplice() = + und AlignedSplice() = ++:
Mit + werden die Videostückchen nahtlos aneinandergefügt, und davon unabhängig die Audiostückchen nahtlos aneinandergefügt. Manchmal ist das nützlich, wenn man Segmente zusammenfügen will, die eben so getrennt wurden.
Mit ++ werden die Video-Audio-Clips so zusammengefügt, dass eventuell Stille eingefügt wird, falls das Audio eines Clips kürzer als das Video sein sollte, oder das überstehende Audio wird abgeschnitten, falls es länger sein sollte, damit die Stückchen auch nach dem Zusammenfügen weiter hinten immer noch synchron bleiben.
SetMTmode(2,0)
SetMemoryMax(768)Im Grunde eher anders herum; SetMemoryMax() möglichst als allererste Zeile. Ist aber eventuell nicht wirklich ausschlaggebend.
-
Und dann würde ich es eher anders versuchen:
Zitat
SetMemoryMax(768)SetMTmode(5,2) ####was hattest Du? Ein Dual-Core?### 5 ja und dahinter ne 2
LoadPlugin("C:\Programme\AviSynth 2.5\plugins\FFVideoSource\ffms2.dll")
Import("C:\Programme\AviSynth 2.5\plugins\FFVideoSource\FFMS2.avsi")FFmpegSource2("E:\xxxxxx\xxxxx.mov",atrack=-1,threads=1) ###und natürlich der Rest
AssumeTFF()SetMTmode(2) ###ist zwar irgendwo blödsinn aber laß mal ruhig drin
return(last) ####wichtig
Edit:
Kann es sein,wenn Du mit ++ arbeitest das nach jeden Videoeintrag ein (,atrack=-1,threads=1) hinter muß.Sonst ist die Funktion ja garnicht aktiv -
Und dann noch mal sauber; macht im Grunde das gleiche, aber durch die Clipvariablen bekommt man als Mensch vielleicht etwas mehr Übersicht, und AviSynth vielleicht die Chance, genauer anzugeben, an welcher Stelle es echt nicht mehr geht:
PHP
Alles anzeigenSetMemoryMax(768) SetMTMode(5, 2) # Modus 5 ist für *Source-Plugins oft zu empfehlen, damit die nicht mehrfach überlappend gestartet werden; # danach die Anzahl paralleler Threads: maximal die Anzahl virtueller CPU-Kerne (nur beim ersten Aufruf) LoadPlugin("C:\Programme\AviSynth 2.5\plugins\FFVideoSource\ffms2.dll") Import("C:\Programme\AviSynth 2.5\plugins\FFVideoSource\FFMS2.avsi") clip01 = FFmpegSource2("MVI_0001.MOV", atrack=-1, threads=1).AssumeTFF() clip02 = FFmpegSource2("MVI_0002.MOV", atrack=-1, threads=1).AssumeTFF() clip03 = FFmpegSource2("MVI_0003.MOV", atrack=-1, threads=1).AssumeTFF() clip04 = FFmpegSource2("MVI_0004.MOV", atrack=-1, threads=1).AssumeTFF() clip05 = FFmpegSource2("MVI_0005.MOV", atrack=-1, threads=1).AssumeTFF() # ... SetMTMode(2) # Modus 2 für parallele Filterung, wo es was nützt; die Anzahl der Threads ändert sich nun nicht mehr AlignedSplice(clip01, clip02, clip03, clip04, clip05) # nur die ausführlichere Form von clip01 ++ clip02 ++ ... return(last)
Nur allein das Zusammenfügen von Clips gewinnt allerdings durch Parallelisierung keinerlei Geschwindigkeitsvorteile, weil das Video ja sequentiell angefordert wird. Einen wirklichen Nutzen bringt die Parallelisierung nur bei Filtern, die den Videoinhalt tatsächlich verändern.
__Heute wurde übrigens r722 von FFMS2 fertiggestellt.
-
Heute wurde übrigens r722 von FFMS2 fertiggestellt.
Huch und ich habe vorhin gerade geschaut :ja:LigH Schick! So ist es Perfekt. Aber wie Du schon geschrieben hast.Ein Geschwindigkeitsvorteil bringt es nicht.Höchstens das die Max-Memory besser greift.
-
LigH: kleine Frage am Rande: Macht MT bei soetwas überhaupt Sinn? Wäre es nicht zumindest Speichertechnisch mehr Sinn MT nicht zu nutzen. Eventuell geht es sogar flotter. Hab in letzter Zeit öfter mal gemerkt, dass gerade bei einfachen es durchaus manchmal flotter ist wenn man MT nicht nutzt.
-
Ich hab ja bereits gezweifelt, Selur: Wo nichts zu parallelisieren ist, nützt Multi-Threading theoretisch wahrscheinlich wenig... Die Praxis wird es zeigen, ob nicht noch andere, nicht so offensichtliche Effekte ihre Auswirkungen haben.
-
Normal nutze ich MT bei solchen Sachen ja auch nicht aber wer weiß.
-
Wow, Leute ihr seid echt super! Ich weiß gar nicht, wie ich euch danken soll! Sollte man sich mal begegnen, gebe ich einen aus
Habe jetzt LigH Script übernommen und das funktioniert wirklich klasse! Die 33 Clips starten sofort und VirtualDub belegt über 300MB RAM.
Für meine 5D Mark II Videos habe ich das Script soweit eingeschrumpftCodeglobal MeGUI_darx = 16global MeGUI_dary = 9SetMemoryMax(768)clip01 = FFmpegSource2("MVI_0001.MOV", atrack=-1, threads=1)clip02 = FFmpegSource2("MVI_0002.MOV", atrack=-1, threads=1).ColorYUV(gain_v=10, gain_u=-10)AlignedSplice(clip01, clip02)__film = last__t0 = __film.trim(0, 5816)__t1 = __film.trim(6010, 20788)__t2 = __film.trim(20915, 21251)__t3 = __film.trim(21294, 54960)__t0 ++ __t1 ++ __t2 ++ __t3
Und für meine MPEG2:
Code
Alles anzeigenglobal MeGUI_darx = 16 global MeGUI_dary = 9 SetMemoryMax(768) SetMTMode(5, 2) clip01 = FFmpegSource2("20120909_114736.MPG", atrack=-1, threads=1).AssumeTFF() clip02 = FFmpegSource2("20120909_114752.MPG", atrack=-1, threads=1).AssumeTFF() clip03 = FFmpegSource2("20120909_114824.MPG", atrack=-1, threads=1).AssumeTFF() SetMTMode(2) AlignedSplice(clip01, clip02, clip03) tempgaussmc_beta2(edimode="nnedi3")
Sind natürlich jetzt nur Beispiele, aber ich konnte schon problemlos 104 Clips ladenJetzt brauch ich kein 64bit AviSynth mehr und auch das Zwischenspeichern als AVI fällt komplett weg. Klasse!
Auf ffms2 r722 habe ich auch schon aktualisiert und MeGUI erhält ja in letzter Zeit auch Updates im Sekundentakt.
Von meiner Seite aus ist keine Frage mehr offen -
Freut mich.
Wahrscheinlich haben dann entweder das Laden in Clip-Variablen oder der MT-Modus 5 es AviSynth erst ermöglicht zu wissen, dass für Frame 0 noch nicht Clip 33 geladen sein muss...
-
Wahrscheinlich das Laden in Clip-Varianten. SetMTmode habe ich ja bei meinen MOV Dateien weg gelassen. Das Bild ist schon progressive und das funktioniert ja nun auch problemlos!
-
Zitat
aber ich konnte schon problemlos 104 Clips laden
Tja, das galt dann aber auch nur für MP4 Dateien. Da geht mit FFMS2 ruck zuck! Ganz anders leider bei den MPEG2 Dateien. Da erstellt er nur im 1-2 Sekunden Takt eine ffindex Datei. Das dauert dementsprechend lange, wenn man ein Script öffnet. Das macht besonders in MeGUI Spaß:
AviSynth Script laden. Warten...
AutoEncode. Warten... Fenster öffnet sich
Queue. Warten............
Start! ..... "warten" und irgendwann startet er das encodingMein Projekt mit 103 MPEG2 Dateien dauerte dann selbst FFMS2 zu lange und brach immer nach ca. 75-80 geladenen Videos ab und denkt sich irgend eine Fehlermeldung aus, z.B. Dass die Audio- oder Videospur eines Clips nicht geladen werden kann. Hier blieb mir also doch erstmal nichts anderes übrig, als das Projekt zu teilen und wieder 2 avis zu erstellen.
EDIT: Schade, das Ergebnis mit den 2 ut AVIs ist unbrauchbar. Das Bild ist zwar hauptsächlich flüssig, aber zittert immer mal kurz hin und her. Als ob Zwischendurch zwei falsche Interlaced Bilder zusammengerechnet wurden. Jetzt bin ich wieder ratlos, wie ich das bewerkstelligen soll
EDIT2:
Das Problem scheint wohl wieder mein guter alter Freund, der RAM zu sein. Mit VirtualDub 64bit kann man das Projekt öffnen... nach ca. 3 Minuten Wartezeit. Der RAM Verbrauch sagt wieder alles.
[Blockierte Grafik: http://img6.imagebanana.com/img/z1l535uu/Unbenannt4.png]Irgend jemand ne Idee?
EDIT3: So, mal schauen, was hier so kommt: http://forum.doom9.org/showthread.php?t=165993
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!