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": "{{stacks.ffmpeg.recommended_version}}",
"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": "{{stacks.ffmpeg.recommended_version}}",
"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": {
"robot": "/video/encode",
"use": ":original",
"preset": "hevc"
}
}
}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 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": 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 Transcoding zu beschleunigen.user_metaRecord<string, any>(Standard:{})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_metazusammengefü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}" }.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:"v7")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.
Ab
ffmpeg_stack: "v7"können Sie hier den Wert'empty'verwenden, wenn Sie eigene FFmpeg-Parameter festlegen und dafür den Robot verwenden oder wenn Transloadit keine Encoding-Einstellungen festlegen soll.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
- Auto-rotation for iPhone video uploads launched (English)
- Real-time encoding - over 150x faster (English)
- Transloadit announces WebM support with watermarking (English)
- Launching audio encode Robot & exciting new updates (English)
- Stability & performance boosts with enhanced scaling (English)
- Enhancing FFmpeg for superior encoding performance (English)
- Introducing MPEG-DASH support for adaptive streaming (English)
- New pricing model for future Transloadit customers (English)
- Transloadit launches Turbo Mode for faster video encoding (English)
- How to insert watermarks to videos with Transloadit (English)
- Guide to encoding videos for streaming with Transloadit (English)
- Creating audio waveform videos with FFmpeg & Node.js (English)
- Let's Build: spinning record GIF generator (English)
- Build a Reddit video subtitling bot with Transloadit (English)
- Creating engaging audio visualizations with Transloadit (English)
- Optimizing video quality with advanced compression (English)
- Green screen remover with FFmpeg: chroma key video (English)
- MKV vs MP4: which video format is better? (English)
- Build a 360° video player with Three.js (English)
- Kosten sparen mit On-Demand-Video-Encoding