Videoschnipsel aneinander zu reihen mit Audio crossfade und Video fade

  • Ich suche ein Programm um relativ leicht mehrere Videoschnipsel an einander zu reihen, dabei soll der Ton crossfaden und das Video auf und abgeblendet werden können um so die Teile möglichst schön in einanderübergehen zu lassen. Ich brauche das um Teile von Dokumentationen neu zusammen zu fassen um sie so für Vorträge auf relevante Bereiche zu kürzen.

    Sollte Formate wie h264, xvid, divx , aac, mp3 können.

    Freeware oder, wenn nicht anders möglich, mit Kosten behaftete Software gesucht.

    Einmal editiert, zuletzt von Menedas (16. Januar 2012 um 22:27)

  • Das alles kann AviSynth mit geeigneten Plugins, z.B. FFmpegSource2. Alle Clips sollten möglichst im MKV-Kontainer vorliegen, oder der Haali Media Splitter installiert sein. Dann jeden Clip als Variable öffnen, diese dann im Skript "brutto" mit Trim() schneiden, mit FadeIn()/Dissolve()/FadeOut2() überblenden.

    Ansonsten: Such mal hier nach Beiträgen zu Jahshaka oder OpenVIP, da kommen noch mehr kostenlose Schnittprogramme zusammen.

  • Ich weiß nun leider nicht wie ich in Avisynth eine Kette mit mehreren Videos erstellen kann. Ich kenne es immer nur mit einem Video. Könntest du mir ein kurzes Musterbeispiel schreiben?

    EDIT:
    Mit Jahshaka komme ich irgendwie nicht klar. Da blicke ich auch nicht welche Version da nun für mich sinnvoll wäre. Die neue kommt ja bald. Leider für mich zu spät.

    3 Mal editiert, zuletzt von Menedas (10. Januar 2012 um 11:50)

  • Dissolve() überschneidet ja zwei Clips, ist also das Bindeglied, das die Kette bildet:

    Hinweis: FadeOut2() erzeugt zwei schwarze und stille Frames am Ende. Diese Funktion verwende ich deshalb, damit am Ende ganz sicher alles schwarz und still ist. Der Microsoft Windows Media Player verschluckt bei bestimmten Formaten manchmal das letzte Frame.

  • FFmpegSource kann am besten MKV-Quellen lesen. Für andere Kontainer (v.a. MPEG Program Stream / Transport Stream) ist u.U. die Installation des Haali Media Splitter notwendig. AVI sollte aber auch kein größeres Problem sein. Probier's aus. Wenn es haken sollte, versuche eine Konvertierung des Kontainers (MKVMergeGUI oder GDSMux).

    Das Zielformat kannst du wählen, wie es dir am besten passt und wie du Software findest, die AviSynth als Quelle unterstützt. AviSynth gibt ja immer unkomprimierte Daten an den jeweiligen Video- und Audio-Encoder.

  • Hm, hat crossfade einen Vorteil gegenüber dissolve ?
    Denn wenn die Überläufe eh immer gleich lang sind (z.B. 15 Frames) dann könnte man das auch so machen:

  • :eek: Was schreibe ich denn da für Unfug ... "Crossfade()" gibt's ja gar nicht im AviSynth-Kern. Natürlich ist "Dissolve()" gemeint. :redface:

    Dass man mehr als zwei Clips verbinden kann, ist sicher nützlich, wenn das stets mit den gleichen Parametern passieren soll. Ebenso FadeIO#(), wenn vorn und hinten mit gleicher Geschwindigkeit geblendet wird. Da ist deine Lösung durchaus effizienter. Aber wenn man es unterschiedlich haben will, muss man trennen.

    Mir fehlt eindeutig Praxis... :ratlos:

  • Vielen Dank euch beiden schon mal. Ich werds demnächst dann mal ausprobieren. Im Moment fehlt mir leider etwas die Zeit. Es wird schon funktionieren :)

  • Sollte übrigens LoadCPlugin("Pluginpfad\FFMS2.dll") heißen ;)

    Allerdings habe ich jetzt noch das Problem, dass ich kein Audio habe. Wenn ich das AviSynth mit VitualDub lade steht in den Informationen auch nichts drin. Habe die Dateien auch in mkv umgewandelt.

    EDIT: Müsste das Video bis morgen Nachmittag fertig haben. Ist also dringend :(

    Einmal editiert, zuletzt von Menedas (17. Januar 2012 um 00:17)

  • Ah, vielen lieben Dank. Leider blicke ich die AviSynth Syntax bis heute nicht richtig.

    Wo müsste ich denn in dem Beispiel ein resampleaudio(44100) einbauen?

    Einmal editiert, zuletzt von Menedas (17. Januar 2012 um 10:59)

  • Auf jeden Fall nach dem Source-Plugin und vor dem "return" (oder Ende des Skriptes). Ansonsten relativ egal, wenn du dann nichts mehr am Ton änderst; vielleicht am besten möglichst gleich nach der Source.

    Zur Sicherheit kannst du uns aber noch mal den kompletten CODE des Scriptes zeigen.

    Statt ResampleAudio kann SSRC mit etwas besserer Qualität verwendet werden, aber nur, wenn zwischen typischen Frequenzverhältnissen konvertiert wird (z.B. 48000 zu 44100).

  • Wo ist denn da ein return? Ich habs jetzt überall versucht einzufügen. Anscheinend müsste ich es überall bei der cx Zuweisung als .resampleaudio(44100) anhängen. Sonst bekomme ich nur Fehlermeldungen.

    Also

    Code
    c1 = FFmpegSource2("Video 1.mkv", atrack=-1 ).resampleaudio(44100)

    Aktueller Code:

    Manche der Videos haben nur 22050Hz, deswegen brauch ich das resample. Weiß aber auch nicht, ob das SSRC besser wäre.

    Einmal editiert, zuletzt von Menedas (17. Januar 2012 um 11:38)

  • Wird doch dann tierisch viel zu schreiben. Doppelt soviel. Oder nicht?

    EDIT: Ich sehe gerade, dass bei zwei Videos sogar 48kHz dabei ist. Gibts da irgendwas zu beachten, damit das ganze dann noch synchron läuft. Im Test eben sah es so aus als ob die 48kHz Videos mit resamble auf 44100 nicht mehr synchron wären. Also sample ich alle videos auf 48kHz hoch?

    EDIT2: Nein, auch auf 48kHz laufen die zwei Videos nicht synchron :/ Alle anderen passen.

    3 Mal editiert, zuletzt von Menedas (17. Januar 2012 um 11:43)

  • Wo ist denn da ein return?

    Wenn da keins ist, nimmt AviSynth an, dass in der letzten Zeile "return last" stehen würde, auch wenn es da nicht steht. Grundlagen von AviSynth, implizite Clip-Variable "last" wird immer dort angenommen, wo links vor einer Funktion kein "clip = ..." steht.

    Egal. "Vor dem Ende des Skriptes". Und in deinem Fall:


    Ich habs jetzt überall versucht einzufügen. Anscheinend müsste ich es überall bei der cx Zuweisung als .resampleaudio(44100) anhängen. Sonst bekomme ich nur Fehlermeldungen.

    Manche der Videos haben nur 22050kHz, deswegen brauch ich das resample. Weiß aber auch nicht, ob das SSRC besser wäre.

    Na, wenn alle Clips die gleiche Samplerate und Kanalanzahl hätten, nur eben nicht die gewünschte, dann könnte das ResampleAudio(44100) auch nach Dissolve() eingefügt werden, also nachdem die Einzelteile verbunden sind.

    Weil aber alle Clips eigene Werte haben, ist es nötig, es bei jedem einzelnen Source() anzuwenden, damit alle Clips gleich werden und sich überhaupt mit Dissolve() verbinden lassen.

    SSRC sollte für 22050 => 44100 geeignet sein. Vielleicht musst du auch noch schauen, ob du mono => stereo brauchst.

    Bedenke bitte, dass mt_masktools-26.dll für AviSynth 2.60 gedacht ist; für AviSynth 2.5x sollte man besser die mt_masktools-25.dll verwenden.

  • Ich versteh es nicht. Alles passt soweit, nur zwei Videos die aus einem anderen Video stammen und eben 48kHz haben sind als einziges asynchron. Wenn ich sie einfach nur so einbinde. Passt es noch. Sobald ich aber ein weiteres Video anhänge ist es asnychron. Der Ton ist zu langsam. SSRC ändert da leider auch nichts.

    EDIT: Danke für den Hinweis zu mt_masktools-26.dll. Ist mir zwar bisher noch nichts fehlerhaftes in den letzten ein zwei Jahren damit aufgefallen, aber man kann ja nie wissen :)

    EDIT2:
    Habe jetzt mal folgendes probiert.

    c1 = 44,1kHz
    c2 = 48kHz

    Code
    c1 = FFmpegSource2("Video 1.mkv", atrack=-1).resampleaudio(48000)c2 = FFmpegSource2("Alkohol.mkv", atrack=-1)Dissolve(c1,c2,15).FadeIO2(15)

    Damit ist das zweite Video c2 asyncron. Andere ich das jetzt so:

    Code
    Dissolve(c2,c1,15).FadeIO2(15)

    Ist auch wieder das zweite Video also c1 asynchron.

    2 Mal editiert, zuletzt von LigH (17. Januar 2012 um 12:39)

  • Ist er "zu langsam" (kommt immer später und später) oder "zu lang und dann zu spät"?

    Es kann passieren, dass Tonspuren länger als Videospuren sind. Da kann es helfen, das Video mit Audio "auf seine Video-Länge zu schneiden", bevor man es weiter verarbeitet. Probier mal:

    Code
    c1 = FFmpegSource2("Video 1.mkv", atrack=-1).Trim(0, 0, true).SSRC(48000)
    c2 = FFmpegSource2("Alkohol.mkv", atrack=-1).Trim(0, 0, true).SSRC(48000)
    
    
    Dissolve(c1,c2,15).FadeIO2(15).ConvertAudioTo16bit()

    Ich habe noch ConvertAudioTo16bit() angefügt, weil SSRC immer Fließkomma-Audio erzeugt, aber das kann nicht jeder ACM-Codec oder Audio-Encoder korrekt verarbeiten.

Jetzt mitmachen!

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