Videos transkodieren, skalieren oder mit Wasserzeichen versehen
🤖/video/encode codiert und skaliert Videos und animierte GIFs und versieht sie mit Wasserzeichen.

Der Robot /video/encode ist ein vielseitiges Werkzeug zur Videoverarbeitung, das Transcoding, Größenänderungen und Wasserzeichen unterstützt. Er unterstützt verschiedene Formate, darunter moderne Standards wie HEVC (H.265), und bietet Funktionen wie Voreinstellungen für gängige Geräte, benutzerdefinierte FFmpeg-Parameter für erfahrene Nutzer, die Positionierung von Wasserzeichen und mehr.
Textüberlagerungen mit FFmpeg hinzufügen
Mit dem Filter drawtext von FFmpeg können Sie Videos über den Parameter ffmpeg bei diesem Robot Textüberlagerungen hinzufügen. Hier sind zwei Beispiele — eines mit der Standardschriftart und eines mit dem Namen einer benutzerdefinierten Schriftfamilie:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"text_overlay_default": {
"use": ":original",
"robot": "/video/encode",
"preset": "empty",
"ffmpeg_stack": "v7",
"ffmpeg": {
"codec:a": "copy",
"vf": "drawtext=text='My text overlay':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2"
},
"result": true
},
"text_overlay_custom": {
"use": ":original",
"robot": "/video/encode",
"preset": "empty",
"ffmpeg_stack": "v7",
"ffmpeg": {
"codec:a": "copy",
"vf": "drawtext=font='Times New Roman':text='My text overlay':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2"
},
"result": true
}
}
}
Hinweise:
- Verwenden Sie das Attribut
font, um mit dem Filterdrawtextvon FFmpeg über den Namen auf eine Schriftfamilie zu verweisen. - Namen von FFmpeg-Schriftfamilien enthalten üblicherweise keine Bindestriche (z. B.
Times New Roman), während ImageMagick Namen mit Bindestrichen verwendet (z. B.Times-New-Roman). - Optionen von
drawtextzum Laden von Dateien, etwatextfileundfontfile, werden nicht unterstützt. Verwenden Sie stattdessentextinline und den Namen einer Schriftfamilie. - Behalten Sie das Audio der Quelldatei bei, indem Sie
"codec:a": "copy"festlegen. - Positionieren Sie Text mit den Ausdrücken
xundy. Im obigen Beispiel wird der Text zentriert.
Sehen Sie sich die Live-Demo für Textüberlagerungen (English) an.
Anwendungsbeispiel
Hochgeladene Videos in HEVC (H.265) transkodieren:
{
"steps": {
"hevc_encoded": {
"preset": "hevc",
"robot": "/video/encode",
"use": ":original"
}
}
}Parameter
interpolateboolean | Record<string, boolean>Steuert, ob einzelne Robot-Anweisungsfelder Assembly Variables interpolieren.
Standardmäßig interpolieren die meisten Robot-Anweisungsfelder Assembly Variables. Mit dem Wert
falsebehandeln Sie alle Anweisungsfelder als Literaltext. Wenn Sie stattdessen einen einzelnen Feldpfad auffalsesetzen, 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ürtruefestlegen oder für den jeweiligen Feldpfad den Werttrueverwenden.Verwenden Sie Feldnamen wie
pathoder für verschachtelte Objekte Punktpfade wieffmpeg.vfals Pfadangabe.output_metaRecord<string, boolean> | boolean | Array<string>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": truehinzufügen, um zu ermitteln, ob das Bild transparente Bereiche enthält. Mit dem Eintrag"dominant_colors": truekönnen Sie außerdem ein Array mit hexadezimalen Farbcodes aus dem Bild extrahieren.Für Bilder können Sie auch den Eintrag
"blurhash": truehinzufügen, um einen BlurHash als String 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 Bilder extrahiert der Eintrag
"thumbhash": truestattdessen einen base64-codierten ThumbHash nachmeta.thumbhash, zusammen mitmeta.has_alpha(gibt an, ob ein Alphakanal vorhanden ist, auch wenn das Bild vollständig deckend ist). Der Hash beschreibt die Pixel gemäß EXIF-Ausrichtung und verwendet bei animierten Bildern das erste Frame. Die Extraktion erfolgt nach dem Best-Effort-Prinzip: Bilder über 40 Megapixeln, nicht unterstützte Formate oder ein fehlgeschlagener bzw. durch Grenzwerte beschränkter Decodiervorgang erzeugen keinen Platzhalter. Eine erfolgreiche Extraktion verursacht eine zusätzliche Metadatengebühr in Höhe von 20 % der Bytes dieser Datei. Ist die Option deaktiviert oder wird kein Hash erzeugt, fällt kein ThumbHash-Aufschlag an.Setzen Sie diese Option für den Step, der das Bild erzeugt, etwa
/upload/handlefür hochgeladene Originale oder/image/resizefür verarbeitete Ausgaben. Wird sie nur für/transloadit/storegesetzt, wird keine Extraktion angefordert: Die Speicherung behält die Metadaten des erzeugenden Steps bei. Transloadit Storage speichert einen erzeugten Hash dauerhaft zusammen mit seiner unveränderlichen Version und gibt ihn in gespeicherten Ergebnissen sowie beim nativen Lesen von Assets zurück. Direkte S3-Uploads erzeugen keine Platzhalter. Ein Platzhalter enthält Bildinformationen; schützen Sie ihn daher mit denselben Zugriffskontrollen wie das vollständige Bild.Für Videos können Sie den Parameter
"colorspace": truehinzufügen, um den Farbraum des Ausgabevideos zu extrahieren.Für Videos können Sie außerdem den Eintrag
"interlaced": truehinzufügen, um zu erkennen, ob das Video im Zeilensprungverfahren vorliegt. Dazu wird die ressourcenschonende ffprobe-Optionfield_ordermit einem begrenzten Stichprobendurchlauf mithilfe vonidetüber die ersten Frames der Quelle kombiniert. Die Ergebnisseinterlacedundfield_ordersowie das Diagnoseobjektinterlace_detectionwerden dabei unterfile.metaausgegeben. Dies ist rechenintensiv und wird entsprechend abgerechnet.Für Audio können Sie den Eintrag
"mean_volume": truehinzufügen, um einen einzelnen Wert für die durchschnittliche Lautstärke der Audiodatei zu erhalten.Sie können diesen Parameter auch auf
falsesetzen, um die Metadatenextraktion zu überspringen und das Transkodieren zu beschleunigen.user_metaRecord<string, any>(Standard:{})Fügt jeder ausgegebenen Datei benutzerdefinierte JSON-Metadaten hinzu, ohne den Dateiinhalt zu verändern. Verschachtelte Objekte und Arrays werden unterstützt.
Die Vererbung hängt vom Robot ab. Die Werte werden mit vorhandenen
user_metader Ausgabedatei zusammengeführt; der aktuelle Step ersetzt übereinstimmende Schlüssel auf oberster Ebene. Weisen Sie erforderliche Schlüssel explizit zu, wenn ein Robot neue Ausgabedateien erstellt.In Steps zur Verarbeitung bezieht sich
${file.*}auf die erste Eingabe und${result.*}auf die ausgegebene Datei. Die Werte werden nach der Ausführung des Robots für jede Ausgabedatei ausgewertet, bevor die anschließende Metadatenextraktion und temporäre Speicherung erfolgen. Bei:originalwerden die Werte für jeden Upload vor der Metadatenextraktion ausgewertet.Nachfolgende Steps lesen
${file.user_meta.key}. Ein vollständiges Beispiel und die Vererbungsregeln finden Sie unter Benutzerdefinierte Metadaten.resultboolean(Standard:false)Ob die Ergebnisse dieses Steps im Assembly Status JSON enthalten sein sollen
queuebatchWenn 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_acceptboolean(Standard:false)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 ignoriert beispielsweise problemlos Eingabebilder.
Wenn Sie den Parameter
force_acceptauftruesetzen, 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_errorsboolean | Array<meta | execute>(Standard:[])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
truefestlegen, entspricht dies["meta", "execute"]und Fehler in beiden Phasen werden ignoriert.usestring | Array<string> | Array<object> | objectGibt 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:
{ "use": [ ":original", "encoded", "resized" ] } - Sie können Eingabe-Steps außerdem mit
askennzeichnen, um Robots die semantische Funktion zu übermitteln:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
TippDas ist wahrscheinlich alles, was Sie über
usewissen müssen. Sie können sich jedoch auch die erweiterten Anwendungsfälle ansehen.- Sie können beliebige Namen für Steps wählen, außer
ffmpegobjectEin 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. Die hier angegebenen Optionen haben Vorrang vor den Optionen der Voreinstellung.
ffmpeg_stackv6 | v7 | v8 | string(Standard:"v6.0.0")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.
widthstring | number | nullBreite des neuen Videos in Pixeln.
Wenn der Wert nicht angegeben und der Parameter
presetverfügbar ist, wird die angegebene Breite aus der Voreinstellungpresetübernommen.heightstring | number | nullHöhe des neuen Videos in Pixeln.
Wenn der Wert nicht angegeben und der Parameter
presetverfügbar ist, wird die angegebene Höhe aus der Voreinstellungpresetübernommen.presetandroid | android-high | android-low | android_high | android_low | dash-1080p-video | dash-1080p_video |Konvertiert ein Video gemäß einer Voreinstellung.
Sie können hier den Wert
'empty'verwenden, wenn Sie eigene FFmpeg-Parameter festlegen und dafür den Robot verwenden oder wenn Sie nicht möchten, dass Transloadit Encoding-Einstellungen festlegt.resize_strategycrop | fit | fillcrop | min_fit | pad | stretch(Standard:"pad")Weitere Informationen finden Sie unter verfügbare Strategien zur Größenanpassung.
zoomboolean(Standard:true)Wenn Sie dies auf
falsesetzen, werden kleinere Videos nicht auf die gewünschte Breite und Höhe gestreckt. Einzelheiten dazu, wie sich das Zoomen bei Ihrer bevorzugten Strategie zur Größenänderung auswirkt, finden Sie in der Liste der verfügbaren Strategien zur Größenänderung.cropobject | stringGeben Sie ein Objekt mit den Koordinaten der oberen linken und unteren rechten Ecke des Rechtecks an, das aus dem Originalvideo beziehungsweise den Originalvideos ausgeschnitten werden soll. Die Werte können Ganzzahlen für absolute Pixelwerte oder Strings für prozentuale Werte sein.
Beispiel:
{ "x1": 80, "y1": 100, "x2": "60%", "y2": "80%" }Damit wird aus einem Video mit 1000×1000 Pixeln der Bereich von
(80, 100)bis(600, 800)ausgeschnitten. Das Ergebnis ist ein Quadrat mit einer Breite von 520px und einer Höhe von 700px. Wenncropgesetzt ist, werden die Parameter für Breite und Höhe ignoriert undresize_strategywird automatisch aufcropgesetzt.Sie können auf ähnliche Weise auch einen JSON-String eines solchen Koordinatenobjekts verwenden:
"{\"x1\": <Integer>, \"y1\": <Integer>, \"x2\": <Integer>, \"y2\": <Integer>}"backgroundstring(Standard:"#00000000")Die Hintergrundfarbe des resultierenden Videos im Format
"rrggbbaa"(Rot, Grün, Blau, Alpha), wenn die Größenänderungsstrategie"pad"verwendet wird. Die Standardfarbe ist Schwarz.rotate0 | 90 | 180 | 270 | 360 | falseErzwingt, dass das Video um die angegebene ganzzahlige Gradzahl gedreht wird. Derzeit werden nur Vielfache von
90unterstützt. Wir korrigieren die Ausrichtung vieler Videos automatisch, wenn die Kamera entsprechende Ausrichtungsinformationen bereitstellt. Diese Option ist nur für Videos sinnvoll, die gedreht werden müssen, weil die Kamera die erforderliche Drehung nicht erkannt hat. Wenn Sierotateauffalsesetzen, wird keine Drehung vorgenommen, selbst wenn die Metadaten entsprechende Anweisungen enthalten.hintboolean(Standard:false)Aktiviert Hinting für mp4-Dateien für RTP/RTSP-Streaming.
turboboolean(Standard:false)Teilt das Video in mehrere Abschnitte auf, sodass jeder Abschnitt parallel codiert werden kann, bevor alle codierten Abschnitte zum Ergebnisvideo zusammengesetzt werden. Dies erfordert zusätzliche Priority Job Slots und kann sich bei sehr kleinen Videodateien als kontraproduktiv erweisen.
chunk_durationstring | numberHiermit können Sie die Dauer jedes Chunks festlegen, wenn
turboauftruegesetzt ist. So können Sie diese Funktion mit weniger Priority Job Slots nutzen. Je länger beispielsweise die einzelnen Chunks sind, desto weniger Encoding-Jobs müssen eingesetzt werden.watermark_url"" | string(Standard:"")Eine URL, die auf ein PNG-Bild verweist, das über dieses Bild gelegt wird. Sie können das Wasserzeichen auch über einen anderen Assembly Step bereitstellen.
watermark_positionbottom | bottom-left | bottom-right | center | left | right | top | | Array<bottom | bottom-left | bottom-right | center | left | right | top | >(Standard:"center")Die Position, an der das Wasserzeichen platziert wird.
Sie können auch ein Array möglicher Werte angeben. In diesem Fall wird ein Wert nach dem Zufallsprinzip ausgewählt, zum Beispiel
[ "center", "left", "bottom-left", "bottom-right" ].Mit dieser Einstellung wird das Wasserzeichen in der angegebenen Ecke platziert. Um das Wasserzeichen um eine bestimmte Pixelanzahl zu versetzen, müssen Sie den Abstand zum Bild selbst hinzufügen.
watermark_x_offsetstring | number(Standard:0)Der x-Versatz in Pixeln, um den das Wasserzeichen relativ zu der durch
watermark_positionbestimmten Position verschoben wird.Die Werte können positiv oder negativ sein und führen abhängig vom Parameter
watermark_positionzu unterschiedlichen Ergebnissen. Positive Werte verschieben das Wasserzeichen näher zur Bildmitte, negative Werte weiter von der Bildmitte weg.watermark_y_offsetstring | number(Standard:0)Der y-Versatz in Pixeln, um den das Wasserzeichen relativ zu der durch
watermark_positionbestimmten Position verschoben wird.Die Werte können positiv oder negativ sein und führen abhängig vom Parameter
watermark_positionzu unterschiedlichen Ergebnissen. Positive Werte verschieben das Wasserzeichen näher zur Bildmitte, negative Werte weiter von der Bildmitte weg.watermark_sizestringDie Größe des Wasserzeichens als Prozentwert, zum Beispiel
"50%". Wie das Wasserzeichen skaliert wird, hängt maßgeblich vom Wert fürwatermark_resize_strategyab.watermark_resize_strategyarea | fit | stretch(Standard:"fit")Um die Funktionsweise der Größenanpassungsstrategien zu erläutern, nehmen wir an, dass unser Zielvideo 800×800 Pixel groß und unser Wasserzeichenbild 400×300 Pixel groß ist. Nehmen wir außerdem an, der Parameter
watermark_sizeist auf den Wert"25%"gesetzt.Bei der Größenanpassungsstrategie
"fit"wird das Wasserzeichen so skaliert, dass seine längere Seite 25 % der entsprechenden Videoseite einnimmt. Die andere Seite wird entsprechend dem Seitenverhältnis des Wasserzeichenbilds skaliert. Bei unserem Wasserzeichen ist die Breite die längere Seite, und 25 % der Videogröße entsprechen 200px. Daher würde das Wasserzeichen auf 200×150 Pixel skaliert. Wärewatermark_sizeauf den Wert"50%"gesetzt, würde es auf 400×300 Pixel skaliert und damit einfach in seiner ursprünglichen Größe belassen.Bei der Größenanpassungsstrategie
"stretch"wird das Wasserzeichenbild gestreckt, also ohne Beibehaltung seines Seitenverhältnisses skaliert, sodass beide Seiten jeweils 25 % der entsprechenden Videoseite einnehmen. Da unser Video 800×800 Pixel groß ist, würde das Wasserzeichen bei einer Wasserzeichengröße von 25 % auf 200×200 Pixel skaliert. Seine Höhe würde gestreckt erscheinen, da es unter Beibehaltung des Seitenverhältnisses stattdessen auf 200×150 Pixel skaliert würde.Bei der Größenanpassungsstrategie
"area"wird das Wasserzeichen unter Beibehaltung seines Seitenverhältnisses so skaliert, dass es"xx%"der Fläche des Videos bedeckt. Der Wert vonwatermark_sizebestimmt den prozentualen Flächenanteil.watermark_start_timestring | number(Standard:0)Die Verzögerung in Sekunden ab Beginn des Videos, nach der das Wasserzeichen eingeblendet wird. Standardmäßig wird das Wasserzeichen sofort angezeigt.
watermark_durationstring | number(Standard:-1)Die Dauer in Sekunden, für die das Wasserzeichen angezeigt wird. Kann zusammen mit
watermark_start_timeverwendet werden, um ansprechende Effekte zu erzeugen. Der Standardwert ist-1.0. Das bedeutet, dass das Wasserzeichen während der gesamten Dauer des Videos angezeigt wird.watermark_opacitystring | number(Standard:1)Die Deckkraft des Wasserzeichens. Gültige Werte liegen zwischen
0(unsichtbar) und1.0(vollständig sichtbar).segmentboolean(Standard:false)Teilt die Datei in mehrere Teile auf, damit sie für HTTP Live Streaming von Apple verwendet werden kann.
segment_durationstring | number(Standard:10)Gibt die Länge jedes HTTP-Segments an. Dieser Parameter ist optional. Der von Apple empfohlene Standardwert ist
10. Ändern Sie diesen Wert nur aus gutem Grund.segment_prefixstring(Standard:"")Das für die Benennung verwendete Präfix. Beispielsweise würde das Präfix
"segment_"Dateien mit Namen wie"segment_0.ts","segment_1.ts"usw. erzeugen. Diese Angabe ist optional; standardmäßig wird der Basisname der Eingabedatei verwendet. Siehe auch den zugehörigen Parametersegment_name.segment_namestring(Standard:"")Der für das letzte Segment verwendete Name. Als Variablen sind
${segment_prefix}sowie${segment_number}und${segment_id}verfügbar. Die letzte Variable ist eine UUIDv4 ohne Bindestriche.segment_time_deltastring | numberAuf die Segmentdauer anzuwendendes Delta. Dieser Parameter ist optional und ermöglicht die Feinabstimmung der Segmentgrenzen.
Demos
- Service to generate a slideshow from AI-filtered images (English)
- Overlay videos with dynamic artwork generated with HTML & JS (English)
- Add text overlay to videos (English)
- Service to convert a GIF to a video (English)
- Service to frame video files using a watermark (English)
- Overlay a video on top of another video (English)
- Remove a green screen from a video (English)
- Service to automatically rotate a video (English)
- Video watermarking service (English)
Verwandte Blogbeiträge
- Automatische Drehung für iPhone-Video-Uploads eingeführt
- Echtzeit-Encoding - über 150-mal schneller
- Transloadit kündigt WebM-Unterstützung mit Wasserzeichen an
- Wir starten den audio encode Robot & spannende neue Updates
- Stabilitäts- und Performance-Schub durch verbesserte Skalierung
- FFmpeg für überlegene Encoding-Leistung verbessern
- Wir stellen vor: MPEG-DASH-Unterstützung für adaptives Streaming
- Neues Preismodell für künftige Transloadit-Kunden
- Transloadit startet Turbo Mode für schnelleres Video-Encoding
- So fügen Sie Videos mit Transloadit Wasserzeichen hinzu
- Leitfaden zum Encoding von Videos für Streaming mit Transloadit
- Audio-Wellenform-Videos mit FFmpeg & Node.js erstellen
- Let's Build: GIF-Generator für rotierende Schallplatten
- Build a Reddit video subtitling bot with Transloadit (English)
- Ansprechende Audiovisualisierungen mit Transloadit erstellen
- Videoqualität mit fortschrittlicher Kompression optimieren
- Greenscreen mit FFmpeg entfernen: Chroma-Key-Video
- MKV vs. MP4: Welches Videoformat ist besser?
- 360°-Videoplayer mit Three.js erstellen
- Kosten sparen mit On-Demand-Video-Encoding