Einige Windows 8 User unter euch werden es gewiss schon mitbekommen haben das der [lexicon]Zsnes[/lexicon] nicht hookbar ist von Aufnahmeprogrammen, da Triple Buffering nicht seine Funktion erfüllt. Und einige andere Windows User wie Win7, WinVista und WinXP werden gemerkt haben das Triple Buffering den Emulator etwas ausbremsen tut.
Ich zeige euch hier nun mehrere mögliche Alternativen, mitunter auch Triple Buffering als auch ohne, die Spiele im Emulator aufzuzeichnen.
Weg #1: Triple Buffering (Nicht Nativ):
Triple Buffering (deu. Dreifach Puffer/Speicher) beschreibt ein Konzept in der Computergrafik, bei dem der Framebuffer
des Video-RAM bei Grafikkarten in drei Bereiche unterteilt wird. Ziel des Verfahrens ist es, die bei gleichzeitiger Verwendung von [lexicon]VSync[/lexicon] (vertikale Synchronisation) und Doppelpufferung (double buffering) auftretenden Nachteile während des Bildaufbaus zu kompensieren.
Der Unterschied zwischen Doppel- und Dreifachpufferung liegt in der Einteilung des Framebuffers. Während bei der Doppelpufferung der Framebuffer aus zwei Pufferspeichern (Front- und Backbuffer) besteht, sind es derer drei bei der Dreifachpufferung (ein Frontbuffer und zwei Backbuffer).
Also funktioniert hier der Hook von Aufnahmeprogramm deshalb da er hier den Backbuffer abgreifen kann, der vorher nicht vorhanden war. Im nun befindlichen 2ten Backbuffer kann nun gehookt und die Frames abgegriffen werden.
Funktionieren tut dies im [lexicon]Zsnes[/lexicon] nur wenn man eine [lexicon]Auflösung[/lexicon] wählt wo Filter nutzbar sind.
Dabei gibt es beim [lexicon]Zsnes[/lexicon] mehrere Abkürzungen:
D - Allow Filter / Lasse Filter zu
S - Stretch / Strecken
R - Keep 8:7 Ratio / Behalte 8:7 Verhältnis bei
W - Windowed / Im Windows Fenster
F - Fullscreen / Im Vollbild
Passend für jeden User sind die Custom Auflösungen die ganz unten in der Liste bei Video zu finden sind.
Wichtig halt ist für Triple Buffering die Nutzung der Filter. Da die Filter bei einer Custom [lexicon]Auflösung[/lexicon] nur bei Vollbild nutzbar sind, wird automatisch halt auch eine Vollbildauflösung notwendig sein.
Eine 8:7 Ratio (Seitenverhältnis) ist ein typisches Standard Seitenverhältnis für [lexicon]Snes[/lexicon] Games (Original). (Muss jeder für sich wissen ^^)
Unter Filter ist dann Triple Biffering zu finden und kann dann aktiviert werden.
Nun sollten Aufnahmeprogramme wie [lexicon]Fraps[/lexicon], [lexicon]DXTory[/lexicon], [lexicon]MSI Afterburner[/lexicon] und Co. den Znes aufnehmen können.
Weg #2 Desktopaufnahme (Nicht Nativ):
Klar, Weg Nummer 2 ist die Aufnahme via Desktop. Sprich ohne Hooking. Auch hierbei darf der [lexicon]Zsnes[/lexicon] im Vollbild laufen und mit Filter arbeiten.
Desktopaufnahmen gehen z.B. mit:
[lexicon]MSI Afterburner[/lexicon] (Riva Tuner = Application Detection Level auf None stellen)
[lexicon]Fraps[/lexicon] (Nur via Windows Aero = DWM Mode)
Virtual Dub (Screen Capture)
[lexicon]Camtasia[/lexicon] Screen Recorder (Bitte hier geeigneten [lexicon]Codec[/lexicon] verwenden dann)
Weg #3 Intern via Mencoder und FFV1 [BGR32] ([lexicon]Lossless[/lexicon]) (Nativ):
Weg Nummer 3 ist schon kniffliger, dafür aber absolut Nativ. Was mein ich mit Nativ? Nativ ist wenn in der [lexicon]Auflösung[/lexicon] aufgenommen wird den die Romgrafiken hergeben. Nativ ist, wenn es im Original Seitenverhältnis auch ist. Und es ist auch die [lexicon]FPS[/lexicon] damit gemeint die bei [lexicon]Snes[/lexicon] Games bei 60/1,001 [lexicon]FPS[/lexicon] liegt. Sprich 59,94 [lexicon]FPS[/lexicon].
Wenn diese native [lexicon]Auflösung[/lexicon] auch noch [lexicon]Lossless[/lexicon] in der Farbunterabtastung 4:4:4 aufzunehmen ist, dann hat man im Endeffekt ein hübsches Video was man sehr sehr schön hochpolieren kann und die Qualität somit der ersten beiden genannten Wege in den Schatten stellt.
ACHTUNG!!! Leider hat dieser Weg nur einen Nachteil. Die Spiele müssten für ein [lexicon]Let's Play[/lexicon] nachkommentiert werden, da es bei dieser Art der Aufnahme keine Framedrops geben wird.
Was ist zu tun?
Als erstes werdet ihr ein paar Tools brauchen:
- Mencoder (Zur interner Video-Aufzeichnung) [ACHTUNG: Es darf keine neuere Version sein]
Download - [lexicon]AVISynth[/lexicon] (Entweder via dem [lexicon]SSM[/lexicon] installieren lassen oder auf http://avisynth.nl/index.php/Main_Page#Official_builds sich die passende Version runterladen und installieren)
- [lexicon]MeGUI[/lexicon] wäre schön zu besitzen, da hier alle [lexicon]AVISynth[/lexicon] Filter dabei sind die gebraucht werden. (BassVideo und FFMS2)
Ihr entpackt die mencoder.7z mit WinRar oder 7zip und kopiert die beiden Datein "mencoder.exe" und "pthreadGC2.dll" direkt in euer [lexicon]ZSnes[/lexicon] Verzechnis.
Sind beide Files im [lexicon]Zsnes[/lexicon] Verzeichnis, so startet und beendet ihr den [lexicon]ZSnes[/lexicon] um folgende Datein erzeugen zu lassen:
Hier öffnen wir nun mit dem normalen Windows Editor die Datei "zmovie.cfg" und ändern die Zeile
md_ffv1="-ovc lavc -lavcopts vcodec=ffv1:vstrict=-2:aspect=4/3"
in
md_ffv1="-ovc lavc -lavcopts vcodec=ffv1:vstrict=-2:format=bgr32"
Damit wird mencoder angeordnet, das er die Frames nicht in 4:3 strecken soll wie vorher angegeben war, sondern Original Seitenverhältnis beibehält und er speichert FFV1 nicht in YV12 ab, sondern in BGR32 alias RGB32. RGB24 gibt es leider nicht als Auswahlformat bei Mencoder.
Nun öffnet ihr euren [lexicon]ZSnes[/lexicon] und stellt ihn wie gewohnt ein wie ihr es haben wollt.
Als nächstes müsst ihr ein Spiel starten/laden um dann unter "Misc" in die "Movie Opt" zu gelangen
Jetzt wirds interessant.
Links (siehe letztes Bild oben) seht ihr den Tab "Control" und rechts den Tab "Dumping". Beides gehört zusammen, aber beides baut aufeinander auf.
Im Tab "Control" könnt ihr für ein Spiel bis zu 10 Filme aufnehmen. Dies entspricht aber einer Makroaufzeichnung des Spieles. Das bedeutet: Sobald ihr unter Control ein Movie recorden tut, wird dies Makromäßig im Verzeichnis der Rom als zmv aufgezeichnet. Sprich die zmv wird am Ende der Aufnahme nur wenige KB besitzen. Beendet die Makroaufzeichnung, sobald ihr mit dem Dumpen beginnen wollt.
Ist die Makroaufnahme erfolgt, könnt ihr diese Aufzeichnungen als richtiges Video dumpen lassen. Dafür ist dann der Tab "Dumping" da. Hier wählt ihr eure Makroaufzeichnung die ihr bei Control angelegt habt aus (0 - 9) und könnt dann das Video dumpen lassen.
Da wir nun FFV1 eingestellt haben in der CFG, nutzen wir auch gleich die FFV1 Auswahl und lassen Audio nur an sich dumpen. (VORSICHT: Nicht mit Video mergen lassen, weil Mencoder dann eine MP3 daraus machen wird.)
Stellt es am besten so ein wie auf dem rechten Bild gezeigt wird.
Die Dumping Length sollte am besten so lang sein wie die Makroaufnahme der zmv Datei.
Habt ihr alles so, könnt ihr das Video dumpen lassen. Dies kann dann einige Minuten in Anspruch nehmen, da die Makroaufzeichnung dann noch mal durchlaufen wird.
Es sollten zwei Datein danach entstehen. Einmal die "Video.avi" und einmal die "Audio.[lexicon]wav[/lexicon]".
- Ab hier kann auch ein Tool verwendet werden was ganz unten dieses Tutorials als Anhang zu finden ist -
Nun müssen diese beiden Files noch entsprechend angepasst und zusammengesetzt werden. Weil ich glaube kaum das NLEs was mit FFV1 anfangen können. Darum machen wir nun aus dem Video ein UTVideo und reparieren auch gleich noch die falsch geschriebene [lexicon]WAV[/lexicon] Datei (32bit float).
Das können wir mit [lexicon]AVISynth[/lexicon] und den Filtern von [lexicon]MeGUI[/lexicon] erledigen.
Dazu erstellen wir uns ein AVS Skript:
Dieses Skript kann dann mit FFMpeg in UTVideo und [lexicon]pcm[/lexicon] signed 16Bit little Endian gespeichert werden.
FFMpeg Befehl dazu:
ffmpeg.exe -i FFV1_merged.avs -c:v utvideo -c:a pcm_s16le -map 0 FFV1_to_UTVideo_merged.avi
Damit hättet ihr ein natives komprimiertes [lexicon]Lossless[/lexicon] RGB24 UtVideo [lexicon]Zsnes[/lexicon] Aufnahme.
Weg #4 Intern via Mencoder und RAWVideo [BGR24] ([lexicon]Lossless[/lexicon]) (Nativ):
Die Aufnahme geschieht auf gleichen Weg wie der beschriebene Weg #3, nur das man jetzt statt FFV1, RAWVideo wählt.
Dies erzeugt dann eine "rawvideo.bin", sowie eine "audio.[lexicon]wav[/lexicon]"
Die rawvideo.bin ist nun so kodiert, das man Spezifische Angaben machen muss die zur Auslesung der Bildinformationen dienen. Diese RAW (deu. Roh) Speicherung erfolgt beim [lexicon]Zsnes[/lexicon] absolut unkomprimiert [lexicon]Lossless[/lexicon] statt.
Aufgabe ist es nun dieses Video zu dekodieren. Auch hier hilft uns [lexicon]AVISynth[/lexicon] wieder weiter.
- Ab hier kann auch ein Tool verwendet werden was ganz unten dieses Tutorials als Anhang zu finden ist -
Um die zu dekodierenden spezifischen Informationen zu finden brauchen wir ledeglich nur die "zmovie.cfg" zu öffnen und werden dort fündig.
Die spezifischen Angaben sind halt:
Breite: 256
Höhe: 224
[lexicon]FPS[/lexicon]: NTSC: 59649/995 und PAL: 50/1 (Sehr Wichtig, da dies Nachjustiert werden muss)
Ein zusätzliches [lexicon]AVISynth[/lexicon] Plugin wird nun Notwendig
- RawSource - Download
Das folgende [lexicon]AVISynth[/lexicon] Skript sieht dann so aus:
NTSC Version:
PAL Version:
Dieses Skript kann dann mit FFMpeg in UTVideo und [lexicon]pcm[/lexicon] signed 16Bit little Endian gespeichert werden.
FFMpeg Befehl dazu:
ffmpeg.exe -i RAW_merged.avs -c:v utvideo -c:a pcm_s16le -map 0 FFV1_to_UTVideo_merged.avi
PS: Wenn ihr die FFV1 Methode und die RAWMethode mit den gleichen Makrovideo austestet, werdet ihr zum Schlussstrich bei dem UTVideo absolut identische Files haben.
Tools:
Eine bereits fertig konfiguriertes zmovie.cfg + Mencoder + [lexicon]AVISynth[/lexicon] Plugins + FFMpeg + Batchdatein die automatisch dann via ffmpeg ein Video erstellen habe ich mal samt Emulator zusammengefasst und hochgeladen.
HINWEIS: Bitte die Ordnerstrucktur des [lexicon]ZSnes[/lexicon] Verzeichnis so belassen nach dem entpacken, da sonst die Batchdatein nicht mehr funktionieren!
- [lexicon]ZSnes[/lexicon] v1.5.1 MovieMod: Download
Sobald in FFV1 oder RAWVideo aufgenommen wurde, kann mit den Batchdatein im Unterordner die Videos encodiert werden mit UTVideo.
Wie ihr dann aufnehmen wollt, liegt ganz bei euch.
Ein paar Beispiele die man dann mit den Nativen Videos dann anstellen kann mit den richtigen Resizern :