# Videos zusammenfügen

Robot: `/video/concat`

🤖/video/concat fügt mehrere Videos zusammen.

> [!Note]
> Die Eingabevideos können unterschiedliche Abmessungen und Streams aufweisen. Der Robot kann dies problemlos verarbeiten. Falls erforderlich, transkodiert er die Eingabevideos vor dem Zusammenfügen ohne zusätzliche Kosten.

Mit [🤖/video/concat](/de/docs/robots/video-concat.md) können Sie praktisch unbegrenzt viele Videodateien zusammenfügen.

Phase: ga

## Anwendungsbeispiel

Wenn Ihr Formular 3 Dateieingabefelder enthält und Sie die hochgeladenen Videos in einer bestimmten Reihenfolge zusammenfügen möchten, weisen Sie Transloadit mithilfe des Attributs \`name\` der einzelnen Eingabefelder an. Verwenden Sie dieses Attribut als Wert für den Schlüssel \`fields\` im JSON und setzen Sie \`as\` auf \`video\_\[\[index]]\`. Transloadit fügt die Dateien in aufsteigender Indexreihenfolge zusammen:

```json
{
  "steps": {
    "concatenated": {
      "robot": "/video/concat",
      "use": {
        "steps": [
          {
            "name": ":original",
            "fields": "first_video_file",
            "as": "video_1"
          },
          {
            "name": ":original",
            "fields": "second_video_file",
            "as": "video_2"
          },
          {
            "name": ":original",
            "fields": "third_video_file",
            "as": "video_3"
          }
        ]
      }
    }
  }
}
```

## Parameter

* `interpolate`: Steuert, ob einzelne Robot-Anweisungsfelder Assembly Variables interpolieren.

  Standardmäßig interpolieren die meisten Robot-Anweisungsfelder Assembly Variables. Mit dem Wert `false` behandeln Sie alle Anweisungsfelder als Literaltext. Wenn Sie stattdessen einen einzelnen Feldpfad auf `false` setzen, wird nur dieses Feld als Literaltext behandelt. Bei Feldern eines bestimmten Robots, die standardmäßig als Literaltext behandelt werden, aktivieren Sie die Interpolation wieder, indem Sie hierfür `true` festlegen oder für den jeweiligen Feldpfad den Wert `true` verwenden.

  Verwenden Sie Feldnamen wie `path` oder für verschachtelte Objekte Punktpfade wie `ffmpeg.vf` als Pfadangabe.

* `output_meta`: Damit können Sie eine Reihe von Metadaten festlegen, deren Berechnung mehr CPU-Ressourcen beansprucht. Sie sind daher standardmäßig deaktiviert, damit Ihre Assemblies schnell verarbeitet werden.

  Für Bilder können Sie diesem Objekt den Eintrag `"has_transparency": true` hinzufügen, um zu ermitteln, ob das Bild transparente Bereiche enthält. Mit dem Eintrag `"dominant_colors": true` können Sie außerdem ein Array mit hexadezimalen Farbcodes aus dem Bild extrahieren.

  Für Bilder können Sie auch den Eintrag `"blurhash": true` hinzufügen, um einen [BlurHash](https://blurha.sh) zu extrahieren – eine kompakte Darstellung eines Platzhalters für das Bild, mit der Sie eine unscharfe Vorschau anzeigen können, während das vollständige Bild geladen wird.

  Für Videos können Sie den Parameter `"colorspace": true` hinzufügen, um den Farbraum des Ausgabevideos zu extrahieren.

  Für Videos können Sie außerdem den Eintrag `"interlaced": true` hinzufügen, um zu erkennen, ob das Video im Zeilensprungverfahren vorliegt. Dazu wird die ressourcenschonende ffprobe-Option `field_order` mit einem begrenzten Stichprobendurchlauf mithilfe von `idet` über die ersten Frames der Quelle kombiniert. Die Ergebnisse `interlaced` und `field_order` sowie das Diagnoseobjekt `interlace_detection` werden dabei unter `file.meta` ausgegeben. Dies ist rechenintensiv und wird entsprechend abgerechnet.

  Für Audio können Sie den Eintrag `"mean_volume": true` hinzufügen, um einen einzelnen Wert für die durchschnittliche Lautstärke der Audiodatei zu erhalten.

  Sie können diesen Parameter auch auf `false` setzen, um die Metadatenextraktion zu überspringen und das Transcoding zu beschleunigen.

* `user_meta`: Fügt jeder von diesem Robot ausgegebenen Datei benutzerdefinierte Metadaten hinzu, ohne den Dateiinhalt zu verändern.

  Die Werte werden mit allen bereits in der Eingabedatei enthaltenen `user_meta` zusammengeführt. Wenn beide Objekte denselben Schlüssel enthalten, hat der Wert dieses Robots Vorrang. Assembly Variables werden unterstützt, zum Beispiel `{ "internal_file_id": "${file.id}" }`.

* `result`: Ob die Ergebnisse dieses Steps im Assembly Status JSON enthalten sein sollen

* `queue`: Wenn Sie die Queue auf „batch“ setzen, wird die Priorität der Jobs für diesen Step manuell herabgestuft. So vermeiden Sie, Priority Job Slots für Jobs zu belegen, die keine Wartezeit von null in der Queue benötigen.

* `force_accept`: Erzwingt, dass ein Robot einen Dateityp akzeptiert, den er sonst ignorieren würde.

  Standardmäßig ignorieren Robots Dateien, deren Typ sie nicht kennen.
  [🤖/video/encode](/de/docs/robots/video-encode.md) ignoriert beispielsweise problemlos Eingabebilder.

  Wenn Sie den Parameter `force_accept` auf `true` setzen, können Sie erzwingen, dass Robots alle übergebenen Dateien akzeptieren.
  Dies führt in der Regel zu Fehlern und sollte nur zur Fehlersuche oder zur Behandlung von Grenzfällen verwendet werden.

* `ignore_errors`: Fehler in bestimmten Verarbeitungsphasen ignorieren.

  Wenn Sie hierfür `["meta"]` festlegen, ignoriert der Robot Fehler bei der Metadatenextraktion.

  Wenn Sie hierfür `["execute"]` festlegen, ignoriert der Robot Fehler während der Hauptausführungsphase.

  Wenn Sie hierfür `true` festlegen, entspricht dies `["meta", "execute"]` und Fehler in beiden Phasen werden ignoriert.

* `use`: Gibt an, welche Steps als Eingabe verwendet werden sollen.

  * Sie können beliebige Namen für Steps wählen, außer `":original"` (reserviert für von Transloadit verarbeitete Benutzer-Uploads)
  * Sie können mehrere Steps mithilfe von Arrays als Eingabe angeben:
    ```json
    {
      "use": [
        ":original",
        "encoded",
        "resized"
      ]
    }
    ```
  * Sie können Eingabe-Steps außerdem mit `as` kennzeichnen, um Robots die semantische Funktion zu übermitteln:
    ```json
    {
      "use": [
        {
          "name": ":original",
          "as": "image"
        },
        {
          "name": ":original",
          "as": "mask"
        }
      ]
    }
    ```

  > [!Tip]
  > Das ist wahrscheinlich alles, was Sie über `use` wissen müssen. Sie können sich jedoch auch die [erweiterten Anwendungsfälle](/de/docs/topics/use-parameter.md) ansehen.

* `ffmpeg`: Ein Parameterobjekt, das an FFmpeg übergeben wird. Wenn eine Voreinstellung verwendet wird, werden die angegebenen Optionen mit deren Optionen zusammengeführt. Verfügbare Optionen finden Sie in der [FFmpeg-Dokumentation](https://ffmpeg.org/ffmpeg-doc.html). Die hier angegebenen Optionen haben Vorrang vor den Optionen der Voreinstellung.

* `ffmpeg_stack`: Wählt die Version des FFmpeg-Stacks aus, die zum Encoding verwendet werden soll. Derzeit empfehlen wir „v7“. Die exakten Versionen „v6.0.0“, „v7.0.0“ und „v8.0.0“ sind Legacy-Werte, die aus Gründen der Abwärtskompatibilität weiterhin akzeptiert werden. Veraltete „v5.x“-Werte werden ebenfalls akzeptiert.

* `width`: Breite des neuen Videos in Pixeln.

  Wenn der Wert nicht angegeben und der Parameter `preset` verfügbar ist, wird die [angegebene Breite](/de/docs/presets/video.md) aus der Voreinstellung `preset` übernommen.

* `height`: Höhe des neuen Videos in Pixeln.

  Wenn der Wert nicht angegeben und der Parameter `preset` verfügbar ist, wird die [angegebene Höhe](/de/docs/presets/video.md) aus der Voreinstellung `preset` übernommen.

* `preset`: Konvertiert ein Video gemäß einer [Voreinstellung](/de/docs/presets/video.md).

  Ab `ffmpeg_stack: "v7"` können Sie hier den Wert `'empty'` verwenden, wenn Sie eigene FFmpeg-Parameter festlegen und dafür den <dfn>Robot</dfn> verwenden oder wenn Transloadit keine Encoding-Einstellungen festlegen soll.

* `video_fade_seconds`: Bei Verwendung fügt dieser Parameter zwischen den einzelnen Abschnitten Ihres zusammengefügten Videos einen Ein- und Ausblendeffekt für das Video hinzu. Für den Wert wird eine Gleitkommazahl verwendet. Wenn Sie zwischen den einzelnen Videoabschnitten einen Videoverzögerungseffekt von 500 Millisekunden wünschen, wählen Sie `0.5`. Ganzzahlige Werte werden jedoch ebenfalls akzeptiert.

  Dieser Parameter fügt am Anfang oder Ende Ihres Videos keinen Ein- und Ausblendeffekt für das Video hinzu. Wenn Sie dies wünschen, erstellen Sie einen zusätzlichen [🤖/video/encode](/de/docs/robots/video-encode.md)-Step und verwenden Sie unseren Parameter `ffmpeg` so, wie in dieser [Demo](/demos/video-encoding/concatenate-fade-effect.md) gezeigt.

  Bitte beachten Sie, dass dieser Parameter unabhängig vom Hinzufügen von Ein- und Ausblendeffekten für den Ton zwischen den Abschnitten ist.

* `audio_fade_seconds`: Bei Verwendung fügt dieser Parameter zwischen den einzelnen Abschnitten Ihres zusammengefügten Videos einen Ein- und Ausblendeffekt für den Ton hinzu. Für den Wert wird eine Gleitkommazahl verwendet. Wenn Sie zwischen den einzelnen Videoabschnitten einen Tonverzögerungseffekt von 500 Millisekunden wünschen, wählen Sie `0.5`. Ganzzahlige Werte werden jedoch ebenfalls akzeptiert.

  Dieser Parameter fügt am Anfang oder Ende Ihres Videos keinen Ein- und Ausblendeffekt für den Ton hinzu. Wenn Sie dies wünschen, erstellen Sie einen zusätzlichen [🤖/video/encode](/de/docs/robots/video-encode.md)-Step und verwenden Sie unseren Parameter `ffmpeg` so, wie in dieser [Demo](/demos/audio-encoding/ffmpeg-fade-in-and-out.md) gezeigt.

  Bitte beachten Sie, dass dieser Parameter unabhängig vom Hinzufügen von Ein- und Ausblendeffekten für das Video zwischen den Abschnitten ist.

* `chapter_markers`: Wenn der Wert auf `true` gesetzt ist, enthält das zusammengefügte Video Kapitelmarkierungen an den Positionen, an denen die Eingabevideos zusammengefügt werden. Jedes Kapitel erhält als Titel den Basisnamen der entsprechenden Eingabevideodatei.

  Dies erleichtert die Navigation in Videoplayern, die das Springen zwischen Kapiteln unterstützen.

* `sort_by`: Steuert die Reihenfolge gebündelter Eingaben, wenn für den Eingabetyp kein explizit angegebener nummerierter Alias verwendet wird. Nummerierte Aliasse enden mit einem numerischen Suffix wie `_1`.

  Der Standardwert `"basename"` behält das natürliche Legacy-Sortierverhalten nach Basisdateinamen bei.

  Legen Sie hierfür `"import_order"` fest, um die Reihenfolge arraybasierter Import-Steps beizubehalten, wenn alle Eingabedateien vollständige Metadaten zur Importreihenfolge enthalten. `"auto"` bevorzugt ebenfalls die Importreihenfolge und verwendet als Fallback die natürliche Sortierung nach Basisdateinamen.

* `transition`: Gibt den Übergangseffekt an, der zwischen zusammengefügten Videoclips angewendet werden soll.

  * `"none"` (Standard): Kein Übergangseffekt. Die Videos werden direkt aneinandergefügt.
  * `"crossfade"`: Wendet eine Kreuzblende an, bei der das Ende eines Clips allmählich in den Anfang des nächsten Clips übergeht. Sowohl Video als auch Audio werden überblendet.
  * `"fade_to_black"`: Wendet einen Übergang über Schwarz an, bei dem jeder Clip zunächst zu Schwarz ausblendet, bevor der nächste Clip aus Schwarz einblendet.

  Bei Verwendung von `"crossfade"` oder `"fade_to_black"` steuert der Parameter `transition_duration`, wie lange der Übergang dauert. Beachten Sie, dass Kreuzblenden die Gesamtdauer der Ausgabe verkürzen, da sich die Clips während des Übergangs überlappen.

* `transition_duration`: Die Dauer des Übergangseffekts in Sekunden. Gilt nur, wenn `transition` auf `"crossfade"` oder `"fade_to_black"` gesetzt ist.

  Beispielsweise erzeugt der Wert `1.0` einen 1 Sekunde langen Übergang zwischen den Clips. Für eine Genauigkeit im Subsekundenbereich kann der Wert eine Gleitkommazahl sein, zum Beispiel `0.5` für 500 Millisekunden. Wenn Übergänge aktiviert sind, muss er größer als `0` sein.

  Bei Kreuzblenden bezeichnet dieser Wert die Überlappungsdauer, während der beide Clips sichtbar sind. Bei Übergängen vom Typ fade\_to\_black bezeichnet er die Gesamtdauer des Ausblendens und Einblendens, die jeweils zur Hälfte darauf entfallen. Der angewendete Übergang ist auf die halbe Dauer des jeweils kürzeren Clips eines Übergangspaars begrenzt.
