Videoclip aus bmp-Datei mit AVS

  • Hallo zusammen,
    LigH:

    ich habe dein script etwas umgebaut, es funktioniert prima!
    Allerdings wüsste ich gerne, ob die Audio-Einstellungen aus der drittletzten Zeile übernommen werden.

    Außerdem habe ich versucht, an das Video noch für einen bestimmten Zeitraum "Blackness" anzuhängen, das gelingt mir aber nicht.
    Aviscript meckert, dass 1 Teil Audio hat und der andere nicht.

    Pic_Source="C:\phish.bmp" #Quellort des Bildes angeben
    Audio_Source="C:\kawum.wav" #Quellort des Audios angeben
    fps = 25
    v_len = 10*fps #gibt die Videolänge an
    i_len = 2*fps #gibt die Länge des Fadein an
    o_len = 2*fps #gibt die Länge des Fadeout an
    m_len = v_len - i_len - o_len - 2
    image = ImageReader(Pic_Source, 0, 0, fps, false)
    intro = image.Loop(i_len).FadeIn(i_len)
    middle = image.Loop(m_len)
    outro = image.Loop(o_len).FadeOut(o_len)
    video = intro + middle + outro
    audio = BlankClip(clip=video, audio_rate=48000, stereo=true, sixteen_bit=true)
    audio = WAVSource(Audio_Source)
    AudioDub(video, audio)

    Gruß
    spak

  • Der Clip "audio" aus der drittletzten Zeile wird durch die Neuzuweisung durch das Ergebnis aus der vorletzten Zeile ersetzt. Genauso gut könnte man die drittletzte Zeile weglassen.

    Falls die eingeladene WAV-Datei nicht die Eigenschaften hat, die du brauchst, kannst du sie auch innerhalb von AviSynth konvertieren (z.B. falls es 44100 Hz hatte, nach 48000 Hz umrechnen lassen)...

  • Fein!
    Ich hatte noch etwas nachgetragen:

    Außerdem habe ich versucht, an das Video noch für einen bestimmten Zeitraum "Blackness" anzuhängen, das gelingt mir aber nicht.
    Aviscript meckert, dass 1 Teil Audio hat und der andere nicht.


    Sorry, Nachtrag 2:
    Ist es möglich die Länge der eingelesenen Wave-Datei zu ermitteln, um daraus dann die Länge von "BlankClip" oder blackness() zu ermitteln?

  • Das kann gut sein: Verwende statt dessen "BlankClip" mit den notwendigen Parametern, um das Stück Schwarzfilm mit einer stillen Tonspur zu versehen, die ansonsten die gleichen Eigenschaften hat wie die WAV-Datei. Oder füge es an das Video an (video = intro + middle + outro + black), und setze dann eine Audiospur darunter, die so lang ist wie alles zusammen.

  • Ne, kriege ich nicht hin, ich bleibe immer am Ton hängen:

    Pic_Source="C:\phish.bmp" #Quellort des Bildes angeben
    Audio_Source="C:\kawum.wav" #Quellort des Audios angeben
    fps = 25
    v_len = 10*fps #gibt die Videolänge an
    i_len = 2*fps #gibt die Länge des Fadein an
    o_len = 2*fps #gibt die Länge des Fadeout an
    m_len = v_len - i_len - o_len - 2
    black=blankclip(3000,audio_rate=48000, stereo=true, sixteen_bit=true)
    image = ImageReader(Pic_Source, 0, 0, fps, false)
    intro = image.Loop(i_len).FadeIn(i_len)
    middle = image.Loop(m_len)
    outro = image.Loop(o_len).FadeOut(o_len)
    video = intro + middle + outro + black
    audio = BlankClip(clip=video, audio_rate=48000, stereo=true, sixteen_bit=true)
    audio = WAVSource(Audio_Source)
    AudioDub(video, audio)

  • Das könnte dann daran liegen, dass du das Problem genau umgedreht hast, anstatt es zu beheben:

    Vorher wolltest du den Schwarzclip ohne Ton zum Blendclip mit Ton hinzufügen.

    Jetzt willst du einen Schwarzclip mit Ton zum Blendclip noch ohne Ton hinzufügen.

    Beides muss aber zusammenpassen, damit es funktioniert (und außerdem lassen wir mal den Black-Clip vom Blend-Clip ableiten, damit der Clip automatisch möglichst viele Eigenschaften vom Blend-Clip übernimmt, also z.B. Höhe, Breite, Framerate, Samplingrate, Sampleauflösung):


    Ob nun "UnalignedSplice()" oder "AlignedSplice()" besser ist, weiß ich nicht so genau - die eine sorgt dafür, dass Video- und Audiospur unabhängig voneinander angehängt werden, die andere fügt sie synchronisiert zusammen (und würde eventuelle Lücken sicherlich mit Stille auffüllen? Genau das weiß ich aber eben noch nicht...). Da die angefügte Tonspur im Schwarzbereich ja Stille ist, wird es sicher nicht so viel ausmachen.

  • >Ob nun "UnalignedSplice()" oder "AlignedSplice()" besser ist, weiß ich nicht so genau

    Da habe ich schon so meine Erfahrungen gemacht. 2 verschiedene Clips sollten (wenn ich mich richtig erinnere) mit "++" zusammengefügt werden. Stammen die Clips vom gleichen Capture genügt "+". Ich hatte 2 verschiedene Captures mit "+" zusammengefügt und heftige A/V-Synchronprobleme bekommen.

    bye, Calderon

  • Zitat von Calderon

    Wie kann ich denn nun aus einem BMP-File z.B. ein Video mit 10s Länge incl. FadeIn/FadeOut plus stillem Audio machen ?

    Da geb ich mir doch mal selbst eine einfache Antwort ;)

    video = ImageReader("H:\bw.bmp", 0, 0, 25, false).loop(250)
    audio = BlankClip(video, audio_rate=48000, stereo=true, sixteen_bit=true)
    AudioDub(video, audio).FadeIn(50).FadeOut(50)

    Und für einen bestimmten Zeitraum "Blackness" anzuhängen ...

    video = ImageReader("H:\bw.bmp", 0, 0, 25, false).loop(250)
    audio = BlankClip(video, audio_rate=48000, stereo=true, sixteen_bit=true)
    V1 = AudioDub(video, audio).FadeIn(50).FadeOut(50)
    V2 = BlankClip(V1, 75)
    UnAlignedSplice(V1, V2)

    Ich habe fertig ;)

    bye, Calderon

  • Vielen Dank!

    Es klappt bestens und sieht so einfach aus, hatte alles mögliche verschoben und umgestrickt, bekam aber immer wieder Fehlermeldungen.
    In der Doku habe ich nach einer Funktion gesucht, die die Länge des eingefügten Audioanteils ermittelt, bin aber nicht fündig geworden.
    Ist da etwas machbar?

    Schönen Sonntag

    Gruß

    spak

    :)

  • Auch eine Nur-Tonspur ist ein Clip. Und jeder Clip hat generelle "Clip-Eigenschaften" (siehe Inhaltsverzeichnis der Dokumentation aus dem Installer).

    "WAVSource("*.wav").Audiolength" ermittelt die Länge der Tonspur. Leider weiß ich nicht, in welcher Einheit - vielleicht Float in Sekunden?

    Aber auch das AudioDub()-Ergebnis hat eine "Audiolength"-Eigenschaft. Wahrscheinlich kann die Länge der Tonspur eines Clips sich von der Länge der Videospur unterscheiden - schließlich gibt es ja deswegen auch mit "{Un}AlignedSplice()" zwei Funktionen...

  • Sorry, ich schon wieder!

    Ich habe dieses geschrieben:

    WAVSource(Audio_Source).AudioLength
    blend = AudioDub(video, audio)
    black = BlankClip(blend,AudioLength)
    UnalignedSplice(blend, black)

    Nur wie bekomme ich den mit "AudioLength" ermittelten Wert in "black",
    AudioLength selbst wird nicht akzeptiert.:so-nicht:

  • "{clip}.Audiolength" ist eine Funktion. Das heißt, sie muss links von einem Gleichheitszeichen stehen, und rechts davon eine Variable, die das Ergebnis aufnimmt. Deren Wert kann man dann in einen String umwandeln und z.B. mit "Subtitle" in das Video einblenden lassen (oder du findest den Filter, der die Ausgabe von Informationen in eine Textdatei erlaubt, ich weiß jetzt nicht, wie der hieß - vielleicht was mit "Debug"...).

  • LigH: rinks und lechts vertauscht? :lol:

    Audiolength liefert Anzahl samples (also sekunden * samplefrequenz)

    Also sowas wie

    audio = WAVSource(Audio_Source)
    video = AviSource(...)
    blend = AudioDub(video, audio)
    a_len = AudioLength(audio)*FrameRate(audio)/AudioRate(audio) #Reihenfolge ist wichtig, sonst gibt es Rundungsfehler
    black = BlankClip(blend,a_len)

    geht.

  • Jo, es geht:


    ....
    ...
    video = intro + middle + outro
    audio = WAVSource(Audio_Source)
    WAVSource(Audio_Source).AudioLength
    video = AviSource(Pic_Source)
    a_len = AudioLength(audio)*FrameRate(audio)/AudioRate(audio) ###Reihenfolge ist wichtig, sonst gibt es Rundungsfehler
    ####Audiolength liefert Anzahl samples (also sekunden * samplefrequenz)
    blend = AudioDub(video, audio)
    black = BlankClip(blend,a_len)
    UnalignedSplice(blend, black)

    nur die Berechnung von a_len klappt nicht, wenn ich allerdings z.B. 1000 für a_len angebe, dann läuft's.

    Oder muss ich die Werte von Hand eintragen?

    Gruß

    spak

  • Du scheinst immer noch nicht ganz zu wissen, was du da tust:

    audio = WAVSource(Audio_Source)
    WAVSource(Audio_Source).AudioLength

    Welchen Zweck hat bei dir die zweite dieser beiden Zeilen? -- Gar keine: Du fragst eine Eigenschaft ab, merkst dir das Ergebnis aber nirgends (das wäre sonst in einer links ;) mit Gleichheitszeichen davorstehenden Variablen). Weg damit.

    Außerdem erhältst du in a_len einen Fließkommawert in Sekunden; BlankClip erwartet aber eine Länge in Frames als Ganzzahlwert, oder?!

  • Hi LigH,
    du hast naürlich recht, die Zeile "WAVSource(Audio_Source).AudioLength" ist überflüssig!
    Ich war der Ansicht, dass die Berechnung:

    AudioLength(audio)*FrameRate(audio)/AudioRate(audio)

    die Frames angibt. Sollten das nicht stimmen, hilf mir bitte auf die Sprünge :)

    Und wie komme ich dann bei "A_len" zu einem ganzzahligen Ergebnis?

    Gruß

    spak

  • sorry, hatte kleinen Auslassfehler:
    es muss heissen

    a_len = int(AudioLength(audio)*FrameRate(audio)/AudioRate(audio))

    dass ist dann eine Ganzzahl (sonst meckert Trim) und auch schon in frames.

  • Hier wird sie geholfen! :D
    Thanks

    Leider klappt's immer noch nicht:

    Pic_Source="C:\phish.bmp" # Quellort des Bildes angeben
    Audio_Source="C:\neu.wav" # Quellort des Audios angeben
    fps = 25
    v_len = 10*fps #gibt die Videolänge an
    i_len = 2*fps #gibt die Länge des Fadein an
    o_len = 2*fps #gibt die Länge des Fadeout an
    m_len = v_len - i_len - o_len - 2
    image = ImageReader(Pic_Source, 0, 0, fps, false)
    intro = image.Loop(i_len).FadeIn(i_len)
    middle = image.Loop(m_len)
    outro = image.Loop(o_len).FadeOut(o_len)
    video = intro + middle + outro
    audio = WAVSource(Audio_Source)
    A_Laenge = AudioLength(audio)####Audiolength liefert Anzahl samples (also sekunden * samplefrequenz)
    Frame_Rate=FrameRate(audio)
    Audio_Rate=AudioRate(audio)
    a_len=int(A_Laenge*Frame_Rate/Audio_Rate)###Reihenfolge ist wichtig, sonst gibt es Rundungsfehler
    blend = AudioDub(video, audio)
    black = BlankClip(blend,a_len)
    UnalignedSplice(blend, black)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!