Concaténer des vidéos
Le Robot đ€/video/concat concatĂšne plusieurs vidĂ©os.

Les vidĂ©os dâentrĂ©e peuvent avoir des dimensions et des flux diffĂ©rents : le Robot gĂšre cela sans problĂšme. Il prĂ©-transcode les vidĂ©os dâentrĂ©e si nĂ©cessaire avant la concatĂ©nation, sans coĂ»t supplĂ©mentaire.
Il est possible de concatĂ©ner un nombre pratiquement infini de fichiers vidĂ©o Ă lâaide de đ€/video/concat.
Exemple dâutilisation
Si vous avez un formulaire avec 3 champs de saisie de fichier et souhaitez concatĂ©ner les vidĂ©os tĂ©lĂ©versĂ©es dans un ordre prĂ©cis, indiquez-le Ă Transloadit Ă lâaide de lâattribut name de chaque champ. Utilisez cet attribut comme valeur de la clĂ© fields dans le JSON et dĂ©finissez as sur video_[[index]]. Transloadit concatĂšnera les fichiers selon lâordre croissant des index :
{
"steps": {
"concatenated": {
"robot": "/video/concat",
"use": {
"steps": [
{
"as": "video_1",
"fields": "first_video_file",
"name": ":original"
},
{
"as": "video_2",
"fields": "second_video_file",
"name": ":original"
},
{
"as": "video_3",
"fields": "third_video_file",
"name": ":original"
}
]
}
}
}
}ParamĂštres
interpolateboolean | Record<string, boolean>DĂ©termine si les Assembly Variables sont interpolĂ©es pour chaque champ dâinstruction.
Par dĂ©faut, la plupart des champs dâinstruction des Robots interpolent les Assembly Variables. DĂ©finissez ce paramĂštre sur
falsepour traiter tous les champs dâinstruction comme du texte littĂ©ral, ou dĂ©finissez le chemin dâun champ individuel surfalsepour traiter uniquement ce champ comme du texte littĂ©ral. Pour les champs propres Ă un Robot qui sont littĂ©raux par dĂ©faut, dĂ©finissez ce paramĂštre surtrueou dĂ©finissez le chemin de ce champ surtruepour rĂ©activer lâinterpolation.Utilisez des noms de champs tels que
path, ou des chemins avec points tels queffmpeg.vfpour les objets imbriqués.output_metaRecord<string, boolean> | boolean | Array<string>Permet de spécifier un ensemble de métadonnées dont le calcul est plus coûteux en puissance CPU et qui sont donc désactivées par défaut afin que le traitement de vos Assemblies reste rapide.
Pour les images, vous pouvez ajouter
"has_transparency": truedans cet objet pour dĂ©terminer si lâimage contient des parties transparentes, et"dominant_colors": truepour extraire de lâimage un tableau de codes couleur hexadĂ©cimaux.Pour les images, vous pouvez Ă©galement ajouter
"blurhash": truepour extraire une chaĂźne BlurHash â une reprĂ©sentation compacte dâun espace rĂ©servĂ© pour lâimage, utile pour afficher un aperçu flou pendant le chargement de lâimage complĂšte.Pour les images,
"thumbhash": trueextrait plutĂŽt un ThumbHash encodĂ© en base64 dansmeta.thumbhash, accompagnĂ© demeta.has_alpha(qui indique si un canal alpha existe, mĂȘme lorsque lâimage est entiĂšrement opaque). Il dĂ©crit les pixels orientĂ©s selon les donnĂ©es EXIF et utilise la premiĂšre image des images animĂ©es. Lâextraction est effectuĂ©e au mieux : les images de plus de 40 mĂ©gapixels, les formats non pris en charge ou un dĂ©codage Ă©chouĂ© ou limitĂ© ne produisent aucun espace rĂ©servĂ©. Une extraction rĂ©ussie ajoute des frais de mĂ©tadonnĂ©es Ă©quivalents Ă 20 % des octets de ce fichier. Aucun supplĂ©ment ThumbHash ne sâapplique lorsque lâoption est dĂ©sactivĂ©e ou lorsquâaucun hash nâest produit.DĂ©finissez cette option sur le Step qui produit lâimage, par exemple
/upload/handlepour les originaux tĂ©lĂ©versĂ©s ou/image/resizepour les sorties traitĂ©es. La dĂ©finir uniquement sur/transloadit/storene dĂ©clenche pas lâextraction : le stockage conserve les mĂ©tadonnĂ©es du Step producteur. Transloadit Storage conserve un hash gĂ©nĂ©rĂ© avec sa version immuable et le renvoie dans les rĂ©sultats stockĂ©s et lors des lectures natives de ressources. Les tĂ©lĂ©versements directs vers S3 ne gĂ©nĂšrent pas dâespaces rĂ©servĂ©s. Un espace rĂ©servĂ© contient des informations sur lâimage : protĂ©gez-le donc avec les mĂȘmes contrĂŽles dâaccĂšs que lâimage complĂšte.Pour les vidĂ©os, vous pouvez ajouter le paramĂštre
"colorspace": truepour extraire lâespace colorimĂ©trique de la vidĂ©o de sortie.Pour les vidĂ©os, vous pouvez Ă©galement ajouter
"interlaced": truepour dĂ©tecter si la vidĂ©o est entrelacĂ©e. Cette option combine lâindicateur ffprobe peu coĂ»teuxfield_orderavec une passe dâĂ©chantillonnageidetlimitĂ©e sur les premiĂšres images de la source, et exposeinterlaced,field_orderainsi quâun objet de diagnosticinterlace_detectionsousfile.meta. Cette opĂ©ration est coĂ»teuse en calcul et facturĂ©e en consĂ©quence.Pour lâaudio, vous pouvez ajouter
"mean_volume": truepour obtenir une valeur unique représentant le volume moyen du fichier audio.Vous pouvez également définir cette option sur
falsepour ignorer lâextraction des mĂ©tadonnĂ©es et accĂ©lĂ©rer le transcodage.user_metaRecord<string, any>(par dĂ©faut :{})Ajoute des mĂ©tadonnĂ©es JSON personnalisĂ©es Ă chaque fichier Ă©mis sans modifier son contenu. Les objets et tableaux imbriquĂ©s sont pris en charge.
LâhĂ©ritage dĂ©pend du Robot. Les valeurs sont fusionnĂ©es avec la valeur
user_metaexistante du fichier de sortieâŻ; le Step actuel remplace les clĂ©s de premier niveau correspondantes. Attribuez explicitement les clĂ©s requises lorsquâun Robot crĂ©e de nouvelles sorties.Dans les Steps de traitement,
${file.*}dĂ©signe la premiĂšre entrĂ©e et${result.*}le fichier Ă©mis. Les valeurs sont Ă©valuĂ©es pour chaque sortie aprĂšs lâexĂ©cution du Robot, avant lâextraction ultĂ©rieure des mĂ©tadonnĂ©es et le stockage temporaire. Sur:original, les valeurs sont Ă©valuĂ©es pour chaque tĂ©lĂ©versement avant lâextraction des mĂ©tadonnĂ©es.Les Steps en aval lisent
${file.user_meta.key}. Consultez MĂ©tadonnĂ©es personnalisĂ©es pour un exemple complet et les rĂšgles dâhĂ©ritage.resultboolean(par dĂ©faut :false)Indique si les rĂ©sultats de ce Step doivent figurer dans lâAssembly Status JSON
queuebatchDĂ©finir la file dâattente sur « batch » abaisse manuellement la prioritĂ© des Jobs de ce Step afin dâĂ©viter de consommer des emplacements prioritaires de Jobs pour des Jobs qui nâont pas besoin dâun temps dâattente nul dans la file
force_acceptboolean(par dĂ©faut :false)Forcer un Robot Ă accepter un type de fichier quâil aurait ignorĂ©.
Par dĂ©faut, les Robots ignorent les fichiers quâils ne connaissent pas. Le Robot đ€/video/encode, par exemple, ignorera volontiers les images en entrĂ©e.
Avec le paramĂštre
force_acceptdĂ©fini surtrue, vous pouvez forcer les Robots Ă accepter tous les fichiers qui leur sont envoyĂ©s. Cela entraĂźne gĂ©nĂ©ralement des erreurs et ne doit ĂȘtre utilisĂ© que pour le dĂ©bogage ou pour traiter des cas limites.ignore_errorsboolean | Array<meta | execute>(par dĂ©faut :[])Ignore les erreurs pendant certaines phases du traitement.
Si vous définissez cette valeur sur
["meta"], le Robot ignorera les erreurs lors de lâextraction des mĂ©tadonnĂ©es.Si vous dĂ©finissez cette valeur sur
["execute"], le Robot ignorera les erreurs lors de la phase dâexĂ©cution principale.DĂ©finir cette valeur sur
trueĂ©quivaut Ă["meta", "execute"] : les erreurs seront alors ignorĂ©es dans les deux phases.usestring | Array<string> | Array<object> | objectIndique quel(s) Step(s) utiliser comme entrĂ©e.
- Vous pouvez choisir nâimporte quel nom pour les Steps, sauf
":original"(rĂ©servĂ© aux tĂ©lĂ©versements des utilisateurs gĂ©rĂ©s par Transloadit) - Vous pouvez fournir plusieurs Steps en entrĂ©e Ă lâaide de tableaux :
{ "use": [ ":original", "encoded", "resized" ] } - Vous pouvez Ă©galement Ă©tiqueter les Steps dâentrĂ©e avec
aspour transmettre une intention sémantique aux Robots :{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
AstuceCâest probablement tout ce que vous devez savoir sur
use, mais vous pouvez consulter les cas dâutilisation avancĂ©s.- Vous pouvez choisir nâimporte quel nom pour les Steps, sauf
ffmpegobjectUn objet de paramÚtres à transmettre à FFmpeg. Si un préréglage est utilisé, les options spécifiées sont fusionnées par-dessus celles du préréglage. Pour connaßtre les options disponibles, consultez la documentation de FFmpeg. Les options spécifiées ici ont priorité sur celles du préréglage.
ffmpeg_stackv6 | v7 | v8 | string(par dĂ©faut :"v6.0.0")SĂ©lectionne la version de la pile FFmpeg Ă utiliser pour lâencodage. Nous recommandons actuellement dâutiliser « v7 ». Les versions exactes « v6.0.0 », « v7.0.0 » et « v8.0.0 » sont des valeurs hĂ©ritĂ©es qui restent acceptĂ©es pour assurer la rĂ©trocompatibilitĂ©. Les valeurs « v5.x », dĂ©prĂ©ciĂ©es, sont Ă©galement acceptĂ©es.
widthstring | number | nullLargeur de la nouvelle vidéo, en pixels.
Si la valeur nâest pas spĂ©cifiĂ©e et que le paramĂštre
presetest disponible, la largeur fournie parpresetsera appliquée.heightstring | number | nullHauteur de la nouvelle vidéo, en pixels.
Si la valeur nâest pas spĂ©cifiĂ©e et que le paramĂštre
presetest disponible, la hauteur fournie parpresetsera appliquée.presetandroid | android-high | android-low | android_high | android_low | dash-1080p-video | dash-1080p_video |Convertit une vidéo selon des paramÚtres préconfigurés.
Vous pouvez utiliser ici la valeur
'empty'si vous spĂ©cifiez vos propres paramĂštres FFmpeg Ă lâaide du Robot, ou si vous ne souhaitez pas que Transloadit dĂ©finisse de paramĂštres dâencodage.video_fade_secondsstring | number(par dĂ©faut :0)Lors de la concatĂ©nation dâau moins deux fichiers, une valeur positive applique un fondu sortant Ă la vidĂ©o de chaque entrĂ©e et un fondu entrant Ă chaque entrĂ©e aprĂšs la premiĂšre. Il nây a pas de fondu entrant au dĂ©but du rĂ©sultat, mais le fondu sortant est Ă©galement appliquĂ© Ă la derniĂšre entrĂ©e.
La valeur est une durée en secondes. Par exemple,
0.5correspond Ă 500 millisecondes. Omettez ce paramĂštre ou dĂ©finissez-le sur0pour dĂ©sactiver ces fondus par entrĂ©e. Ils ne font pas se chevaucher les clips et nâinsĂšrent pas de temps supplĂ©mentaire entre eux.Les durĂ©es des fondus vidĂ©o sont arrondies Ă lâimage entiĂšre infĂ©rieure et plafonnĂ©es Ă la durĂ©e de chaque entrĂ©e.
Ce paramĂštre ne sâapplique que lorsque
transitionvaut"none". Il est ignorĂ© lorsquetransitionvaut"crossfade"ou"fade_to_black"âŻ; utiliseztransition_durationpour ces effets. Les fondus audio sont contrĂŽlĂ©s sĂ©parĂ©ment paraudio_fade_seconds.Pour ajouter un fondu entrant au dĂ©but du rĂ©sultat, utilisez un Step dâencodage vidĂ©o supplĂ©mentaire avec le paramĂštre
ffmpeg, comme le montre la dĂ©mo de fondu vidĂ©o (English).audio_fade_secondsstring | number(par dĂ©faut :0)Lors de la concatĂ©nation dâau moins deux fichiers, une valeur positive applique un fondu sortant Ă lâaudio de chaque entrĂ©e et un fondu entrant Ă chaque entrĂ©e aprĂšs la premiĂšre. Il nây a pas de fondu entrant au dĂ©but du rĂ©sultat, mais le fondu sortant est Ă©galement appliquĂ© Ă la derniĂšre entrĂ©e.
La valeur est une durée en secondes. Par exemple,
0.5correspond Ă 500 millisecondes. Omettez ce paramĂštre ou dĂ©finissez-le sur0pour dĂ©sactiver ces fondus par entrĂ©e. Ils ne font pas se chevaucher les clips et nâinsĂšrent pas de temps supplĂ©mentaire entre eux.Les fondus sortants audio commencent sur une limite de seconde entiĂšre et peuvent se terminer avant la fin de lâentrĂ©e.
Ce paramĂštre ne sâapplique que lorsque
transitionvaut"none". Il est ignorĂ© lorsquetransitionvaut"crossfade"ou"fade_to_black"âŻ; utiliseztransition_durationpour ces effets. Les fondus vidĂ©o sont contrĂŽlĂ©s sĂ©parĂ©ment parvideo_fade_seconds.Pour ajouter un fondu entrant audio au dĂ©but du rĂ©sultat, utilisez un Step dâencodage vidĂ©o supplĂ©mentaire avec le paramĂštre
ffmpeg. La démo de fondu audio (English) montre le filtre audio FFmpeg correspondant.chapter_markersboolean(par défaut :false)Lorsque ce paramÚtre est défini sur
true, la vidĂ©o concatĂ©nĂ©e contient un marqueur de chapitre Ă lâendroit oĂč chaque vidĂ©o dâentrĂ©e commence dans la sortie. Chaque chapitre porte pour titre le nom de base du fichier vidĂ©o dâentrĂ©e correspondant. Lorsquâunetransitionest activĂ©e, le chapitre du clip entrant commence au dĂ©but de sa transition, en tenant compte du chevauchement entre les clips.Câest utile pour la navigation dans les lecteurs vidĂ©o qui prennent en charge le dĂ©placement par chapitre.
Dans une sortie MP4, les marqueurs de chapitre ajoutent une piste
bin_datacontenant les informations de chapitre. Câest normal et cela nâaffecte pas la lecture de la vidĂ©o ni de lâaudio.sort_byauto | basename | import_order(par dĂ©faut :"basename")ContrĂŽle lâordre des entrĂ©es regroupĂ©es lorsquâaucun alias numĂ©rotĂ© explicite nâest utilisĂ© pour le type dâentrĂ©e. Les alias numĂ©rotĂ©s se terminent par un suffixe numĂ©rique tel que
_1.La valeur par défaut
"basename"conserve lâancien comportement de tri naturel par nom de base.DĂ©finissez cette option sur
"import_order"pour prĂ©server lâordre des Steps dâimportation basĂ©s sur un tableau lorsque tous les fichiers dâentrĂ©e portent des mĂ©tadonnĂ©es dâordre dâimportation complĂštes."auto"applique la mĂȘme prĂ©fĂ©rence pour lâordre dâimportation, avec le tri naturel par nom de base comme solution de repli.transitionnone | crossfade | fade_to_black(par dĂ©faut :"none")SpĂ©cifie lâeffet de transition Ă appliquer entre les clips vidĂ©o concatĂ©nĂ©s.
"none"(par dĂ©faut) : aucun effet de transition. Les vidĂ©os sont jointes bout Ă bout."crossfade" : applique un fondu enchaĂźnĂ© oĂč la fin dâun clip se mĂ©lange progressivement avec le dĂ©but du clip suivant. La vidĂ©o et lâaudio sont tous deux enchaĂźnĂ©s en fondu."fade_to_black" : applique une transition en fondu par le noir oĂč chaque clip sâestompe vers le noir avant que le clip suivant apparaisse progressivement depuis le noir.
Avec
"crossfade"ou"fade_to_black", le paramĂštretransition_durationcontrĂŽle la durĂ©e de la transition. Les deux effets font se chevaucher les clips adjacents et rĂ©duisent la durĂ©e totale de la sortie de la durĂ©e de transition appliquĂ©e Ă chaque jonction. La durĂ©e appliquĂ©e est plafonnĂ©e Ă la moitiĂ© du plus court des deux clips de chaque paire.transition_durationstring | number(par dĂ©faut :1)La durĂ©e de lâeffet de transition, en secondes. Sâapplique uniquement lorsque
transitionest défini sur"crossfade"ou"fade_to_black".Par exemple, une valeur de
1.0crĂ©e une transition de 1 seconde entre les clips. La valeur peut ĂȘtre un nombre Ă virgule flottante pour une prĂ©cision infĂ©rieure Ă la seconde (par exemple,0.5pour 500 millisecondes) et doit ĂȘtre supĂ©rieure Ă0chaque fois que des transitions sont activĂ©es.Pour les fondus enchaĂźnĂ©s, il sâagit de la durĂ©e de chevauchement pendant laquelle les deux clips sont visibles. Pour
"fade_to_black", la vidĂ©o sâestompe pendant environ les premiers 20 % de la transition, puis apparaĂźt pendant les 80 % restants (environ 0,2 seconde pour lâestompage et 0,8 seconde pour lâapparition dans une transition de 1 seconde). Lâaudio est enchaĂźnĂ© en fondu pendant toute la transition pour les deux effets.La transition appliquĂ©e est plafonnĂ©e Ă la moitiĂ© du plus court des clips de chaque paire de transition. Les deux effets raccourcissent la sortie de cette durĂ©e appliquĂ©e Ă chaque jonction.
Articles de blog associés
- AmĂ©liorer FFmpeg pour des performances dâencodage supĂ©rieures
- Quatre nouveaux Robots pour améliorer le traitement des médias
- Nouveau modĂšle tarifaire pour les futurs clients de Transloadit
- No-code real-time video uploading with Bubble & Transloadit (English)
- Nouveautés vidéo : transitions, chapitres, CMAF et plus encore