Neues für Videos: Übergänge, Kapitel, CMAF und mehr
In den vergangenen Monaten haben wir einige Videofunktionen hinzugefügt, mehrere davon auf Kundenwunsch. Bisher haben wir sie noch nicht vorgestellt. Hier sind sie nun an einem Ort, jeweils mit Assembly Instructions, die wir vor der Veröffentlichung in Produktion ausgeführt haben.
Überblendungen zwischen Clips
🤖 /video/concat fügt Videos aneinander. Setzen Sie transition auf
crossfade oder fade_to_black, damit die Clips ineinander überblenden, statt mit einem harten Schnitt zu wechseln:
{
"steps": {
"first": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/big-buck-bunny-10s.mp4"
},
"second": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/waves10.mp4"
},
"concatenated": {
"robot": "/video/concat",
"use": {
"steps": [
{ "name": "first", "as": "video_1" },
{ "name": "second", "as": "video_2" }
]
},
"transition": "crossfade",
"transition_duration": 1,
"ffmpeg_stack": "v7"
}
}
}
Der Ton wird zusammen mit dem Bild überblendet. Hier sehen Sie Einzelbilder unmittelbar vor, während und unmittelbar nach dem Übergang:

Das sollten Sie wissen:
transition_durationwird in Sekunden angegeben und hat den Standardwert1. Der Wert ist auf die Hälfte der Länge des kürzeren Clips jedes Paares begrenzt.- Die Clips überlappen während des Übergangs, daher ist das Ergebnis kürzer: Unsere Clips mit
10 Sekunden und 13 Sekunden Länge ergaben ein Video mit 22 Sekunden. Das gilt auch für
fade_to_black. - Bei einem Übergang codieren wir das Video neu. Die Verarbeitung dauert daher länger als beim einfachen Zusammenfügen, bei dem die Streams unverändert kopiert werden können.
- 🤖 /video/merge unterstützt dieselben zwei Parameter, aber
/video/concateignet sich besser zum Zusammenfügen von Clips. Clips mit unterschiedlichen Größen und Bildraten werden zunächst an gemeinsame Vorgaben angepasst, und Ihre Ausgabe bleibt im MP4-Format.
Kapitelmarkierungen für zusammengefügte Videos
Wenn Sie ein Intro, den Hauptinhalt und ein Outro zusammenfügen, setzen Sie chapter_markers: true. Player,
die Kapitel unterstützen, können dann direkt zu jedem Teil springen:
{
"steps": {
"intro": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/big-buck-bunny-10s.mp4"
},
"main": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/waves10.mp4"
},
"outro": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/fake-ad.mp4"
},
"concatenated": {
"robot": "/video/concat",
"use": {
"steps": [
{ "name": "intro", "as": "video_1" },
{ "name": "main", "as": "video_2" },
{ "name": "outro", "as": "video_3" }
]
},
"chapter_markers": true,
"transition": "crossfade",
"transition_duration": 1,
"ffmpeg_stack": "v7"
}
}
}
Jedes Kapitel erhält den Namen seiner Eingabedatei ohne Dateiendung. ffprobe zeigt die Kapitel im
Ergebnis:
$ ffprobe -v error -show_entries chapter=start_time,end_time:chapter_tags=title -of compact big-buck-bunny-10s_waves10_fake-ad.mp4
chapter|start_time=0.000000|end_time=9.000000|tag:title=big-buck-bunny-10s
chapter|start_time=9.000000|end_time=21.000000|tag:title=waves10
chapter|start_time=21.000000|end_time=26.000000|tag:title=fake-ad
Benennen Sie Ihre Eingabedateien entsprechend, um den Kapiteln gut lesbare Titel zu geben. Wenn Sie einen Übergang hinzufügen, berücksichtigen die Kapitelzeiten die Überlappung. So passt jede Markierung weiterhin zu ihrem Clip.
Fette, kursive und umrandete Untertitel
🤖 /video/subtitle brennt Untertitel ins Bild ein. Sie können sie jetzt mit
bold, italic und outline_width (0 bis 10 Pixel) gestalten. Diese Assembly verwendet eine
hochgeladene Datei im Format .srt und ein importiertes Video:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"video": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/fake-ad.mp4"
},
"subtitled": {
"robot": "/video/subtitle",
"use": {
"steps": [
{ "name": "video", "as": "video" },
{ "name": ":original", "as": "subtitles" }
]
},
"subtitles_type": "burned",
"preset": "empty",
"font_size": 22,
"bold": true,
"outline_width": 4,
"ffmpeg_stack": "v7"
}
}
}
Die obere Hälfte zeigt den Standardstil, die untere bold: true mit outline_width: 4.
Diese Darstellung bleibt auf einem hellen Hintergrund lesbar:

Die Gestaltung gilt nur für eingebrannte Untertitel, nicht für Untertitelspuren. "preset": "empty" behält
das MP4-Format der Eingabe bei. Ohne Voreinstellung greift der Robot auf eine alte FLV-Voreinstellung
zurück.
Mehrsprachiges Audio in HLS
Um ein Video in mehreren Sprachen anzubieten, benötigen Sie keine separate Reihe von
Video-Qualitätsstufen mehr für jede Sprache.
🤖 /video/adaptive mit audio_group: true verpackt reine Audiodateien
als alternative Audiospuren, auf die jede Video-Qualitätsstufe verweist. Zuschauer können dann im
Player die Sprache wechseln, ohne das Video neu zu laden:
{
"steps": {
"video": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/big-buck-bunny-10s.mp4"
},
"audio_en": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/joakim_karud-rock_angel.mp3"
},
"audio_de": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/german-anthem.mp3"
},
"video_480p": {
"use": "video",
"robot": "/video/encode",
"preset": "hls/480p",
"ffmpeg_stack": "v7"
},
"video_720p": {
"use": "video",
"robot": "/video/encode",
"preset": "hls/720p",
"ffmpeg_stack": "v7"
},
"aac_en": {
"use": "audio_en",
"robot": "/audio/encode",
"preset": "aac",
"ffmpeg_stack": "v7",
"ffmpeg": {
"t": 10,
"metadata:s:a:0": "language=eng"
}
},
"aac_de": {
"use": "audio_de",
"robot": "/audio/encode",
"preset": "aac",
"ffmpeg_stack": "v7",
"ffmpeg": {
"t": 10,
"metadata:s:a:0": "language=deu"
}
},
"hls": {
"use": {
"steps": ["aac_en", "aac_de", "video_480p", "video_720p"],
"bundle_steps": true
},
"robot": "/video/adaptive",
"technique": "hls",
"audio_group": true
}
}
}
Unsere Demo-Dateien enthalten Musik. Stellen Sie sie sich daher als englische und deutsche Tonspur
vor. t: 10 kürzt sie auf die Länge des Videos. Die Sprache jeder Spur stammt aus ihrem Tag
language, das die Option metadata:s:a:0 setzt. Dateien, die bereits ein Sprach-Tag enthalten,
benötigen diese Option nicht. Die resultierende Master-Playlist gibt den Spuren gut lesbare Namen,
und die erste Audiodatei in use wird zur Standardspur. Hat eine Spur ein Titel-Tag, wird
dieser Titel als Name verwendet. Andernfalls verwendet der Robot den Sprachnamen.
AUTOSELECT=YES ermöglicht es Playern, eine Spur für die Sprache des Zuschauers auszuwählen. Der Wert von
BANDWIDTH jeder Video-Qualitätsstufe berücksichtigt auch deren Audio:
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="English",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",CHANNELS="2",URI="128515_44100/128515_44100.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="German",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="deu",CHANNELS="2",URI="128539_44100/128539_44100.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=797670,AVERAGE-BANDWIDTH=797670,RESOLUTION=852x480,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="group_audio",FRAME-RATE=25
852x480_616860_25/852x480_616860_25.m3u8
Mit audio_group enthalten die Video-Qualitätsstufen kein eigenes Audio. Stellen Sie daher jede Sprache
als separate Audiodatei bereit. Speichern Sie die Ergebnisse mit ${file.meta.relative_path} im Pfad, wie in der
Robot-Dokumentation beschrieben, damit die Playlists ihre Segmente finden.
CMAF: ein Satz Segmente für HLS und DASH
Apple-Geräte spielen HLS ab, viele andere Player bevorzugen MPEG-DASH. Mit technique: "cmaf"
schreibt /video/adaptive fragmentierte MP4-Segmente einmal sowie eine HLS-Playlist und ein DASH-Manifest,
die beide darauf verweisen. Sie speichern und cachen eine Kopie Ihres Videos statt zwei:
{
"steps": {
"imported": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/big-buck-bunny-10s.mp4"
},
"encoded_480p": {
"use": "imported",
"robot": "/video/encode",
"preset": "hls/480p",
"ffmpeg_stack": "v7"
},
"encoded_720p": {
"use": "imported",
"robot": "/video/encode",
"preset": "hls/720p",
"ffmpeg_stack": "v7"
},
"cmaf": {
"use": {
"steps": ["encoded_480p", "encoded_720p"],
"bundle_steps": true
},
"robot": "/video/adaptive",
"technique": "cmaf"
}
}
}
Das Ergebnis enthält playlist.m3u8 für HLS, playlist.mpd für DASH und die Segmente .m4s,
die beide gemeinsam nutzen. FFmpeg hat in unseren Tests beide Manifeste ohne Fehler decodiert.
hls_playlist_name und playlist_name benennen die beiden Manifeste um.
Die standardmäßig verfügbaren Voreinstellungen hls/480p und hls/720p funktionieren zusammen
in einer CMAF-Reihe von Qualitätsstufen. Das gilt auch bei der kleinen Abweichung im
Seitenverhältnis, die durch das Runden der 480p-Breite auf eine gerade Zahl entsteht.
Bei dieser Gelegenheit haben wir auch /video/adaptive angepasst: Beim Verpacken von HLS und CMAF
berücksichtigt er jetzt die Optionen für ffmpeg, die Sie übergeben, etwa
hls_flags oder start_number. Zuvor wurden sie ohne Hinweis ignoriert.
iPhone-Videos mit räumlichem Audio
Videos, die auf neueren iPhones mit räumlichem Audio aufgenommen werden, enthalten zwei Audiospuren:
eine reguläre Stereo-AAC-Spur und eine Spur mit Apple Positional Audio, die unser Encoding-Stack
nicht decodieren kann. Bis vor Kurzem ließ diese zweite Spur das gesamte Encoding scheitern.
/video/encode, 🤖 /audio/encode und
🤖 /speech/transcribe überspringen jetzt Audiospuren, die sie nicht decodieren
können, und verwenden die Stereospur. Sie können das Video codieren, seinen Ton extrahieren und eine
hochgeladene iPhone-Aufnahme in einer Assembly transkribieren:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"video": {
"robot": "/video/encode",
"use": ":original",
"preset": "web/mp4/240p",
"ffmpeg_stack": "v7"
},
"audio": {
"robot": "/audio/encode",
"use": ":original",
"preset": "aac",
"ffmpeg_stack": "v7"
},
"transcript": {
"robot": "/speech/transcribe",
"use": ":original",
"provider": "aws",
"format": "text",
"source_language": "en-US"
}
}
}
Das räumliche Audio selbst bleibt nicht erhalten: Das codierte Ergebnis enthält die Stereomischung. Wenn die einzige Audiospur einer Datei räumliches Audio ist, scheitern Audio-Encoding und Transkription weiterhin, da es nichts gibt, was wir decodieren können.
Loslegen
Alle diese Funktionen stehen in jedem Tarif zur Verfügung. Im kostenlosen Community-Tarif werden Audio- und Videoergebnisse gekürzt. Daher kann ein Übergang oder ein späteres Kapitel außerhalb des gekürzten Medienergebnisses liegen. Die Robot-Dokumentation für 🤖 /video/concat, 🤖 /video/subtitle und 🤖 /video/adaptive führt alle Parameter auf. Sie können ein kostenloses Konto erstellen, um die Funktionen auszuprobieren.
