PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 50p nach 25i


Eastermeyer
27. May 2005, 18:11
Guten Abend!

Ich habe einige Videos , die ich aus Computerspielen gecaptured habe.

Es handelt sich um Videos mit einer Framerate von 50 Frames pro Sekunde.

VDM zeigt jedoch 49,998 fps an , also habe ich ein AussumeFPS(50) vorne ins Script gehängt.

Ich möchte diese Videos nun gerne für die Verwendung auf DVD nach 25fps interlaced konvertieren , wie stelle ich das nun am besten an?


#Aufgenommene Dateien laden
AviSource("G:\fraps\CStrike_25_05_05.avi")
WAVSource("G:\TotalRecorder\CStrike_25_05_05.wav")
#Die Framerate wieder richtig runden
AssumeFPS(50,true)
#von 800x600 auf DVD
BilinearResize(720,576)
#Rauschen hinzufügen
ConvertToYV12()
AddGrain(25,0,0)
#Audio richtig hinbiegen
SuperEQ("G:\foobar\bass.feq")
SSRC(48000,fast=false)



Wie kriege ich das ganze nun interlaced?

LigH
27. May 2005, 18:28
Ich würde sagen, das müsste mit einer Hälfte dieser Skripte möglich sein, die zum Field-Tauschen verwendet werden.

- die 50 fps Vollbilder mit SeparateFields trennen
- mit SelectEvery (nur weiß ich jetzt nicht sicher, welche Parameter) von einem Bild das Top-, von einem anderen das Bottom-Field wählen
- mit Weave beide Fields zu einem Frame verbinden

Vielleicht muss irgendwo noch was mit AssumeFieldBased/AssumeFrameBased oder AssumeTTF rein, wenn sich das nicht automatisch ergeben sollte; und auch die Framerate wird bei SeparateFields sicher verdoppelt worden sein, wird aber bei SelectEvery nur theoretisch halbiert, also muss da bestimmt noch die Geschwindigkeit mit AssumeFPS auch noch halbiert werden...

Aber ausgerechnet "ConvertToYV12" wäre dann eine Sache, die man noch mal überdenken sollte, denn YV12 ist bei Interlaced-Material nicht gerade "erste Wahl".

Eastermeyer
27. May 2005, 18:34
Aber ausgerechnet "ConvertToYV12" wäre dann eine Sache, die man noch mal überdenken sollte, denn YV12 ist bei Interlaced-Material nicht gerade "erste Wahl".

Ich hab das da drin wegen AddGrain.

Ich kann ja danch wieder zurückkonvertieren.

Hat eventuell jemand ein Paar Links für mich?

Ich hab überhaupt kein Plan wie ich überhaupt anfangen soll...

Grüße,
Eastermeyer

LigH
27. May 2005, 18:40
Links? Wohin?

http://www.avisynth.org
C:\Programme\AviSynth 2.5\docs

Eastermeyer
27. May 2005, 19:03
Ich hatte an Links zu Progressiv nach Interlaced Konvertierungen gedacht.

Ich erwarte keinesfalls das mir jemand ein fertiges Script zusammenbastelt , aber ien kleiner Gedankenanstoß wäre nicht schlecht.

Ich werde mich mal im Englishen schlau machen...
(forum.doom9.org)

Danke schonmal LigH!

LigH
27. May 2005, 19:15
Dann schau doch mal in der Dokumentation auf deiner Platte. Da sind viele Filter dokumentiert: Zum einen die internen (im Kernel von AviSynth), zum anderen externe (als Plugins). Und die sind dann in Kategorien unterteilt, unter anderem auch auch zur Verwaltung von Interlaced-Videos. Du kannst dir beim Installieren von AviSynth auch eine deutschsprachige Dokumentation mit entpacken lassen. Allerdings sind die englischen Beschreibungen etwas aktueller - auch auf der Website von AviSynth.

scharfis_brain
27. May 2005, 20:50
Das mit dem Rauschen solltest Du wirklich überdenken, denn gerade Computerspiele sind einer der CoDec Killer.
da sind selbst die auf DVD Zugelassenen 9,8 mbps manchmal zu wenig


Dein Script könnte z.B. so aussehen:

#Aufgenommene Dateien laden
AviSource("G:\fraps\CStrike_25_05_05.avi")
WAVSource("G:\TotalRecorder\CStrike_25_05_05.wav")

#Die Framerate wieder richtig runden & Audio biegen
AssumeFPS(50,true)
SSRC(48000,fast=false)
SuperEQ("G:\foobar\bass.feq")

#von 800x600 auf DVD
BilinearResize(704,576)

# ausgabefieldorder festlegen
Assumetff()
# reinterlacing
separatefields().selectevery(4,0,3).weave()

LigH
27. May 2005, 21:08
Gute Vorarbeit geleistet... freut mich! :D

Aber noch etwas vergessen: Video (aus AviSource) und Audio (aus WAVSource) müssen noch verbunden werden. Ich glaube, im vorgegebenen Beispiel wird das Video mit AviSource geöffnet, dann wieder weggeworfen, dann das Audio geöffnet, und ohne Video weiterverarbeitet. Um beide zu verbinden, muss man sie erst mal einzelnen Clips zuweisen, und dann beide Clips mit der Funktion "AudioDub" zu einem Clip mit Video und Audio verbinden:

http://www.avisynth.org/AudioDub

video = AviSource("G:\fraps\CStrike_25_05_05.avi")
audio = WAVSource("G:\TotalRecorder\CStrike_25_05_05.wav")
AudioDub(video,audio)

Eastermeyer
28. May 2005, 10:31
Da ist man mal einen Abend offline um sich einzuarbeiten http://www.schnullerfamilie.de/forum/images/smilies/kaffee2.gif , da bastelt einem wieder scharfi das Script zusammen http://www.schnullerfamilie.de/forum/images/smilies/merci.gif.

Irgendwie hab ich es in letzter Zeit mit den Framerate-Konvertierungen , ich hab scharfi ja schon per PM genervt.

Ohne mich einschleimen zu wollen , möchte ich einfach nur einmal los werden ,das hier im Forum viele ihre Freizeit opfern um anderen zu helfen.
Das find ich richtig gut http://www.schnullerfamilie.de/forum/images/smilies/thumbsup.gif.

Natürlich habe ich selbst schon versucht mich schlau zu machen , aber in der Doku finde ich nur das:

Auf einen 24 fps progressiven Quellclip 3:2 Pulldown anwenden, was einen 30 fps interlaced Clip ergibt:
AssumeFrameBased()
SeparateFields()
SelectEvery(8,0,1,2,3,2,5,4,7,6,7)
Weave()

Ich werd nochmal die Syntax von SelectEvery durchkauenhttp://www.schnullerfamilie.de/forum/images/smilies/suchen.gif.

Grüße,
Eastermeyer

scharfis_brain
28. May 2005, 10:45
dieses beispiel aus der AVS-doku ist furchtbar schwer verständlich.

leichter verständlich mag dieses hier sein, welche exakt dieselbe Funxtion hat (Film -> NTSC):

xxxsource("?.xxx")
selectevery(2,0,0,0,1,1) #24p auf 60 aufpusten
assumetff() #ausgabefieldorder festlegen
separatefields().selectevery(4,0,3).weave() #reinterlacen

aber dieser NTSC-Fall trifft für Dich jetzt garnicht zu!

Eastermeyer
28. May 2005, 11:04
Schon klar , das Beispiel ist ja für 24p nach 30i

Ich hab es gestern Abend so gemacht http://www.schnullerfamilie.de/forum/images/smilies/umfall.gif

AssumeFPS(24)
AssumeFrameBased()
SeparateFields()
SelectEvery(8,0,1,2,3,2,5,4,7,6,7)
Weave()
AssumeFPS(25)

Ich glaub ich fang langsam an zu verstehen.

SeparateFields teilt in die einzelnen Halbbilder auf...

LigH
28. May 2005, 11:13
Aber ich glaube, ich versteh's jetzt komplett:

Jedes Frame wird geteilt in seine Fields. Aus Frame A werden die Fields A1 (Top-Field von Frame A) und A2 (Bottom-Field von Frame A), aus Frame B die Fields B1 (Top-B) und B2 (Bottom-B) ... - Die befinden sich nach "SeparateFields" dann als doppelt so schnelles, halb hohes Video hintereinander, also aus einem Clip mit den Frames A-B-C-D-... wird ein Clip mit den Fields A1-A2-B1-B2-C1-C2-D1-D2-...

Wie anfangs schon erwähnt, brauchen wir nur ein Field aus dem einen Frame, und ein anderes Field aus dem nächsten, usw.; wir wählen uns also: A1-B2-C1-D2-...

Das heißt: Aller 4 "Frames" (die ja eigentlich im aktuellen Clip die hintereinander angeordneten Fields sind) wählen wir uns - da wir Top-Field-First-Video haben wollen - jeweils das erste (also das Top-Field des ersten Frames) und das vierte (also das Bottom-Field des zweiten Frames) aus. Und weil der Index von 0 an gezählt wird, sind das für jede Gruppe von 4 "Frames" (Fields) jeweils das mit dem Index 0, und das mit dem Index 3. Also: SelectEvery(4,0,3).

Hätten wir BFF-Video gewollt, hätten wir statt dessen SelectEvery(4,1,2) verwendet; aber das ist auf DVD ja nicht üblich.

Ich mach mal noch 'ne Grafik, denke ich - hab grad Lust drauf.

scharfis_brain
28. May 2005, 11:29
Hätten wir BFF-Video gewollt, hätten wir statt dessen SelectEvery(4,1,2) verwendet; aber das ist auf DVD ja nicht üblich.

STOP!

hättest Du BFF-Video gewollt, müsste davor nen assumebff stehen (4,0,3).

assumetff und 4,1,2 geht zwar auch ist aber mehr als unüblich.

es gilt:
4,0,3 belässt die vorher festgelegte Fieldorder und 4,1,2 dreht sie um.

Eastermeyer
28. May 2005, 11:50
Ich hab da was in grua`s Signatur gefunden!

########################################################################
# ReinterlaceBob(clip a, bool "tff")
#
# Erzeugt aus einem progressiven ein interlaced Video halber Framerate
# (z.B. aus 50 fps progressive ein 25 fps interlaced)
#
# tff gibt die Field order des zu erzeugenden interlaced Videos an:
# true--> Top Field First (Upper Field First)
# false--> Botttom Field First (Lower Field First)
# Falls nicht angegeben, wird true (Top Field First) angenommen
########################################################################


Ist das was für mich?

LigH
28. May 2005, 11:56
@ scharfis_brain:

Stimmt auch wieder - per "AssumeBFF" würden die Fields in der anderen Reihenfolge separiert werden, und dann stimmt's auch wieder mit der SelectEvery-Auswahl.

Bild: Siehe ^ Anhang.
__

@ Eastermeyer:
function ReinterlaceBob(clip a, bool "tff") {
tff = Default(tff,true)
a = tff ? a.AssumeTFF() : a.AssumeBFF()
a = a.ConvertToYUY2()
SeparateFields(a).SelectEvery(4,0,3).Weave()
}Exakt das. Na, haben wir das Rad eben noch mal erfunden... :redface:

Eastermeyer
28. May 2005, 12:12
Exakt das. Na, haben wir das Rad eben noch mal erfunden...

Hatte ich das mal eher gesehen...http://www.schnullerfamilie.de/forum/images/smilies/neinnein.gif

Danke nochmal!