Hi,
Ich bin dabei mir HD-Testmaterial (720p) mit Avisynth zu erstellen. Was mir unbedingt fehlt ist der SMPTE-Zeitcode mit fps50.
ShowSMPTE(x=469, y=462, size=30) -> 00:00:00:49 ?
Gibt´s da eine Möglichkeit ?
Gruß Gunnar
Hi,
Ich bin dabei mir HD-Testmaterial (720p) mit Avisynth zu erstellen. Was mir unbedingt fehlt ist der SMPTE-Zeitcode mit fps50.
ShowSMPTE(x=469, y=462, size=30) -> 00:00:00:49 ?
Gibt´s da eine Möglichkeit ?
Gruß Gunnar
function super (clip c, string "offset", bool "ms")
{
global rate = c.framerate
global bheight=int(c.height*0.15/4)*4
bwidth=int(c.width*0.4/4)*4
off=int(c.height*0.15/4)*4
ms = default(ms, false)
offset = default(offset,"00:00:00:00")
global offset = tc(offset)
global ms = ms
box=c.crop((c.width-bwidth)/2, c.height-(bheight+off), bwidth, bheight).levels(0,1,255,0,160)
left=c.crop(0, 0, (c.width-bwidth)/2, 0)
right=c.crop((c.width-bwidth)/2 + bwidth, 0, (c.width-bwidth)/2, 0)
top=c.crop((c.width-bwidth)/2, 0, bwidth, c.height-(bheight+off))
bottom=c.crop((c.width-bwidth)/2, c.height-off, bwidth, off)
box = ScriptClip(box, "Subtitle(String(itc(current_frame+offset, rate, ms=ms)),align=2,y=int(.225*bheight) + bheight/2, size=round(.45*bheight), spc=int(.3*bheight), text_color=$ffffff)")
middle=stackvertical(top,box,bottom)
stackhorizontal(left,middle,right)
}
Alles anzeigen
Mug Funkys super sollte helfen
Danke dir bigotti5.
Kannst du mir an einem Beispiel mit ..
ColorBars(1280,720).AssumeFPS(50.0).ConvertToYUY2 ...
zeigen wie "super" eingesetzt wird ?
Ich bekomme bei meinem Script ständig Fehlermeldungen.
Gruß Gunnar
#
# Mug's Timecode stuff.
#
# tc:
# enter a timecode string in quotes, and out comes an integer frame number.
#
# itc:
# reverse of tc - enter a frame number, and out comes a SMPTE timecode.
#
# - for both of these, you can enter a framerate as well (last.framerate is useful)
#
#
# super:
# outputs a SMPTE timecode in a shaded box. useful for subtitling.
#
# - you can also enter a "start timecode" in quotes (like "10:00:00:00")
# which helps if you're syncing with a tape's timecode.
#
function tc (string "timecode", float "rate")
{
rate=default(rate,25)
frames=value(rightstr(timecode,2))
secs=value(rightstr(timecode,5).leftstr(2))*rate
mins=value(rightstr(timecode,8).leftstr(5))*60*rate
hours=value(rightstr(timecode,11).leftstr(8))*60*60*rate
int(hours+mins+secs+frames)
}
function itc (int "framecount", float "rate", bool "ms")
{
rate=default(rate,25)
ms = default(ms, false)
drop = (rate==29.97)? true : false
rate2 = (drop==true)? 30 : rate
hours=floor((framecount/rate)/3600)%60
mins=floor((framecount/rate)/60.0)%60
secs=floor(framecount/rate)%60
milli=floor(1000*framecount/rate)%6000%1000
fmilli=framecount/rate - floor(framecount/rate)
#frames=floor(fmilli*rate2)
frames=framecount%int(rate)
dframes = (drop==false)? frames : (secs==0)&&(mins%10!=0)? floor(fmilli*rate2) + 2 : frames
return (ms==false)? (string(hours,"%02.0f")+":"+string(mins,"%02.0f")+":"+string(secs,"%02.0f")+":"+string(frames,"%02.0f")) :
\ (string(hours,"%02.0f")+":"+string(mins,"%02.0f")+":"+string(secs,"%02.0f")+":"+string(milli,"%03.0f"))
}
function super (clip c, string "offset", bool "ms")
{
global rate = c.framerate
global bheight=int(c.height*0.15/4)*4
bwidth=int(c.width*0.4/4)*4
off=int(c.height*0.15/4)*4
ms = default(ms, false)
offset = default(offset,"00:00:00:00")
global offset = tc(offset)
global ms = ms
box=c.crop((c.width-bwidth)/2, c.height-(bheight+off), bwidth, bheight).levels(0,1,255,0,160)
left=c.crop(0, 0, (c.width-bwidth)/2, 0)
right=c.crop((c.width-bwidth)/2 + bwidth, 0, (c.width-bwidth)/2, 0)
top=c.crop((c.width-bwidth)/2, 0, bwidth, c.height-(bheight+off))
bottom=c.crop((c.width-bwidth)/2, c.height-off, bwidth, off)
box = ScriptClip(box, "Subtitle(String(itc(current_frame+offset, rate, ms=ms)),align=2,y=int(.225*bheight) + bheight/2, size=round(.45*bheight), spc=int(.3*bheight), text_color=$ffffff)")
middle=stackvertical(top,box,bottom)
stackhorizontal(left,middle,right)
}
ColorBars(1280,720).AssumeFPS(50).ConvertToYUY2().killaudio()
Super()
Alles anzeigen
Mhhmmm .... ergibt bei mir einen syntax error, line 51, column 0.
Ich hab wohl ein Brett vor´m Kopf.
EDIT: Ein Zeilenumbruch bei line 51 war die Ursache. Jetzt klappt es.
Herzlichen Dank für das Script.
Gruß Gunnar
Hi,
Super, das Script kann ich auch gut gebrauchen. Aber wie, oder an welcher Stelle im Script, kann man denn die Timecode-Position und die Schriftgröße ändern ? Kann man auch die Millisekunden anzeigen lassen ?
Die Funktion "tc("00:00:00:00")" erzeugt bei mir: "Dies ist kein gültiger Videoclip"
Wäre schön wenn mir jemand auf die Sprünge helfen würde. Mit Avisynth kenn ich mich leider nicht so gut aus.
bye, Haka
Die Funktion "tc()" ist ja auch nur eine Hilfsfunktion zum Berechnen der Millisekunde - aber nicht zum Einblenden in einen Clip.
Dafür ist - wie im Quelltext dokumentiert, nur eben auf englisch - die Funktion "super()" da.
Allgemein reicht es aus, zum Aufruf einfach bloß "super()" in den Quelltext einzufügen, die anderen Parameter sind optional (clip = last; offset = Start-Timecode; ms = true/false: Anzeige als Millisekunden oder H:M:S:F).
Hi LigH,
[gelöscht]
Alles klar, habs verstanden. Danke schön.
bye, Haka
Aber wie, oder an welcher Stelle im Script, kann man denn die Timecode-Position und die Schriftgröße ändern ?
Ist mir sehr wichtig.
bye, Haka
Dort, wo die Ausgabe mit der Funktion "Subtitle" passiert.
Welche Parameter man in der Funktion "Subtitle" angeben kann, erfährst du in der Dokumentation, die mit AviSynth installiert wird, oder im Wiki auf der AviSynth-Website.
Dort, wo die Ausgabe mit der Funktion "Subtitle" passiert.
Welche Parameter man in der Funktion "Subtitle" angeben kann, erfährst du in der Dokumentation, die mit AviSynth installiert wird, oder im Wiki auf der AviSynth-Website.
Hab ich versucht zu verstehen. Aber die Funktion "Subtitel" ist ja im Sript verschachtelt, und außerdem ist da noch ein Hintergrund der auch bewegt werden muß. Ich bin leider kein Programmierer. Laß mal gut sein.
Bye, Haka
Nun ja - zugegeben, die Vorlage ist schon etwas undurchsichtig... Aber wenn du erst mal alle Parameter verstanden hast, dann erkennst du auch leicht, welche du noch zusätzlich angeben oder abändern musst, um das zu erreichen, was du dir vorstellst. Der wichtigste ist "align=2" -- was bedeutet, dass die Standardposition "unten in der Mitte" ist: Wenn du das nicht willst, sollte dieser Parameter zuerst angfepasst werden.
Die Größe des Blocks der Timecode-Einblendung wird hier schon relativ zur Größe des Videos berechnet (in den Variablen bheight und bwidth); solltest du die ändern wollen, müsstest du diese Formeln verändern.
Um eine andere Schriftart als "Arial" zu wählen, müsstest du einen Parameter "font" in den Text mit "Subtitle" einfügen; die Schwierigkeit hier ist jedoch, dass der Text schon in Anführungszeichen steht, du die Schriftart als Zeichenkette aber auch in Anführungszeichen setzen müsstest - das ginge entweder über dreifache Anführungszeichen, oder indem du eine Variable verwendest.
Vielleicht ist es besser, uns zu sagen, wie du das genau haben willst, und wir ändern das Skript entsprechend... es ist doch nicht so trivial wie anfangs gedacht. :redface:
function tc (string "timecode")
{
frames=value(rightstr(timecode,2))
secs=value(rightstr(timecode,5).leftstr(2))*rate
mins=value(rightstr(timecode,8).leftstr(5))*60*rate
hours=value(rightstr(timecode,11).leftstr(8))*60*60*rate
int(hours+mins+secs+frames)
}
function itc (int "framecount", float "rate", bool "ms")
{
rate=default(rate,25)
ms = default(ms, false)
drop = (rate==29.97)? true : false
rate2 = (drop==true)? 30 : rate
hours=floor((framecount/rate)/3600)%60
mins=floor((framecount/rate)/60.0)%60
secs=floor(framecount/rate)%60
milli=floor(1000*framecount/rate)%6000%1000
fmilli=framecount/rate - floor(framecount/rate)
#frames=floor(fmilli*rate2)
frames=framecount%int(rate)
dframes = (drop==false)? frames : (secs==0)&&(mins%10!=0)? floor(fmilli*rate2) + 2 : frames
return (ms==false)? (string(hours,"%02.0f")+":"+string(mins,"%02.0f")+":"+string(secs,"%02.0f")+":"+string(frames,"%02.0f")) : (string(hours,"%02.0f")+":"+string(mins,"%02.0f")+":"+string(secs,"%02.0f")+":"+string(milli,"%03.0f"))
}
function super (clip c, string "offset", bool "ms", int "fsize")
{
global rate = c.framerate
ms = default(ms, false)
offset = default(offset,"00:00:00:00")
global offset = tc(offset)
global ms = ms
global fsize=default(fsize, 48)
global pheight = int(c.height-(c.height/10))
global pwidth = int(c.width-(c.width/10))
ScriptClip(c, "Subtitle(String(itc(current_frame+offset, rate, ms=ms)) ,size=fsize, align=3 , x=pwidth, y=pheight, text_color=$FFFFFF)")
}
ColorBars(1280,720).AssumeFPS(50).ConvertToYUY2().killaudio().trim(0,499)
Super()
Alles anzeigen
Hier ein etwas geändertes Script...
Die Schriftgröße änderst du mit dem Parameter 'fsize' (default 48)
Millisekunden siehst du mit 'ms=true' (default false)
Offset mit 'offset="00:53:25:14"' (default "00:00:00:00")
e.g
super(offset="00:53:25:14", fsize=70, ms=true)
Timecode ist an der rechten unteren Ecke minus je 10% ausgerichtet.
Solltest du eine ander Position bevorzugen müsstest du pheight, pwidth und align anpassen.
Ich bedanke mich recht herzlich für deine Mühe bigotti5.
bye, Haka
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!