Points clés à retenir
- Commencez par un préréglage lorsqu’il correspond déjà à la cible de lecture, puis ne surchargez que les paramètres délibérément choisis pour le produit.
- Traitez le conteneur, le codec vidéo, le codec audio, le profil, le contrôle du débit, le format de pixels et les filtres comme des décisions de compatibilité distinctes.
- Sélectionnez un
ffmpeg_stackde manière délibérée et relancez les tests avec les données de test avant de le modifier, car le comportement des encodeurs et des filtres peut varier d’une version à l’autre.
Le contrôle des codecs se résume rarement à un choix binaire entre un préréglage fixe et une commande FFmpeg brute. Transloadit permet à un Template de partir de préréglages vidéo ou audio maintenus, de remplacer individuellement des options FFmpeg prises en charge ou d’utiliser le préréglage vide lorsque le flux de travail doit définir lui-même les paramètres de sortie.
L’essentiel
- Utilisez
preset: "empty"avec le sélecteur expliciteffmpeg_stack: "v7"recommandé par la documentation du Robot pour définir les paramètres d’encodage sans les valeurs par défaut d’un préréglage. - Créez les variantes de codecs dans des Steps indépendants, puis validez les métadonnées produites et la lecture au lieu de considérer un encodage réussi comme une acceptation.
Commencer par la cible de compatibilité, pas par un codec préféré
Consignez où le résultat doit être lu ou monté avant de choisir les paramètres. Un fichier destiné à être diffusé dans un navigateur, un master d’archivage, un podcast à télécharger et un fichier d’échange ont des exigences différentes, même s’ils partent de la même source. Consignez pour chaque cible le conteneur requis, les codecs vidéo et audio, les profils, la disposition des canaux, les dimensions, la fréquence d’images, la fréquence d’échantillonnage, les sous-titres et la taille maximale de diffusion.
Distinguez les conteneurs des codecs dans cette matrice. MP4, WebM, Ogg et MOV décrivent la manière dont les flux et les métadonnées sont regroupés ; H.264, HEVC, VP9, AAC, Opus et FLAC décrivent la représentation de chaque flux. Un lecteur peut reconnaître un conteneur tout en rejetant l’un de ses flux ; des tests fondés uniquement sur l’extension ne peuvent donc pas établir la compatibilité.
Cible de lecture
Nommez les navigateurs, appareils, logiciels de montage ou spécifications de distribution concrets qui déterminent si une sortie est acceptable.
Politique des flux
Précisez séparément les exigences vidéo et audio afin qu’un conteneur valide ne masque pas un flux non pris en charge.
Éléments probants d’acceptation
Combinez l’inspection des métadonnées et la lecture sur des clients représentatifs au lieu d’approuver un fichier sur la seule base de son extension.
Appliquer des surcharges prises en charge à un préréglage maintenu
Un préréglage est un ensemble versionné de paramètres d’encodage pour une cible courante. /video/encode et /audio/encode fusionnent les entrées de l’objet ffmpeg avec le préréglage sélectionné en leur donnant priorité, de sorte qu’une option explicite remplace la valeur correspondante du préréglage. C’est généralement la politique la plus restreinte qui reste maintenable : hériter du socle établi et consigner uniquement les choix de codec, de profil, de contrôle du débit, de filtre ou de comportement du conteneur délibérément modifiés pour le produit.
Ne copiez pas toutes les options résolues du préréglage dans un Template simplement pour donner l’impression que tout est explicite. Cela crée un préréglage privé que l’application doit comprendre et maintenir. Nommez plutôt le préréglage, limitez l’objet de surcharge aux options nécessaires et inspectez le résultat. Si le flux de travail doit éviter les valeurs FFmpeg par défaut fournies par le préréglage, choisissez preset: "empty", conservez explicitement le sélecteur ffmpeg_stack: "v7" recommandé par la documentation et fournissez le format et les codecs requis.
Configuration de base du préréglage
Fournit un point de départ documenté pour une sortie courante sans obliger le Template à redéfinir chaque option FFmpeg.
Objet de surcharge
Consigne uniquement les paramètres pris en charge qui diffèrent délibérément, et ces valeurs priment sur le préréglage.
Préréglage vide
Rend visible pour les futurs responsables de maintenance l’absence délibérée de valeurs d’encodage par défaut fournies par un préréglage, au lieu de laisser ce choix implicite par omission.
Contrôler délibérément le codec vidéo et les paramètres de contrôle du débit
L’exemple vidéo part du préréglage web/mp4/1080p, sélectionne la branche recommandée v7 de la pile, puis surcharge la contrainte level de H.264 ainsi que les paramètres de contrôle du débit propres au produit dans ffmpeg. Les clés JSON omettent le tiret de la ligne de commande : level, crf, maxrate et bufsize deviennent des options de sortie FFmpeg. Le préréglage continue de fournir son codec vidéo H.264 (libx264), son profil high, son format de pixels yuv420p, son encodeur audio AAC (libfdk_aac), son conteneur MP4 et movflags: "+faststart" ; ces valeurs héritées n’ont pas besoin d’être redéfinies.
Ces valeurs illustrent une politique, sans constituer des recommandations universelles de qualité. Le facteur de débit constant (CRF), le plafond de débit, le profil de l’encodeur, le format de pixels, la complexité de la source et les contraintes de lecture interagissent. Testez du texte, des animations, du grain, du mouvement, des scènes sombres et des vidéos ordinaires de personnes parlant face à la caméra à la résolution prévue. Vérifiez à la fois la qualité visuelle de la sortie et sa compatibilité avec les décodeurs avant d’adopter les paramètres.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"web_video": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/mp4/1080p",
"ffmpeg": {
"level": "4.1",
"crf": 21,
"maxrate": "5M",
"bufsize": "10M"
},
"result": true
}
}
}Contrôle du débit et conformité
Le CRF vise un niveau de qualité, tandis que maxrate et bufsize plafonnent le débit et lissent les pics ; les valeurs utiles dépendent de l’encodeur et de la cible de diffusion. level joue un rôle distinct : cette option fixe un plafond de conformité des décodeurs H.264 qui borne les dimensions des images, le débit de macroblocs et un débit maximal, mais elle ne correspond ni au débit cible ni au plafond de débit définis au moyen de CRF, maxrate et bufsize.
Compatibilité de base du préréglage
Le préréglage sélectionné fournit le profil et le format de pixels, qui peuvent compter autant que le nom du codec pour les décodeurs matériels anciens et ceux des navigateurs.
Démarrage rapide hérité
Le préréglage fournit l’option MP4 movflags pour le téléchargement progressif, mais cela ne remplace ni le streaming adaptatif ni un CDN.
Configurer explicitement une sortie audio avec le préréglage vide
L’exemple audio utilise preset: "empty" avec le sélecteur ffmpeg_stack: "v7" recommandé par la documentation ; le Template fournit donc ses paramètres d’encodage au lieu de les hériter d’un préréglage. Conservez ce sélecteur explicite plutôt que de vous fier à la valeur de repli implicite v6 de l’environnement d’exécution. L’exemple choisit le conteneur Ogg, l’encodeur Opus, un débit cible, une fréquence d’échantillonnage de 48 kHz, deux canaux de sortie et un simple filtre passe-haut. Le Robot /audio/encode accepte les fichiers audio et les fichiers vidéo contenant un flux audio, ce qui rend le même Step utile pour les téléversements de fichiers exclusivement audio et les flux de travail d’extraction de bandes-son.
Le préréglage vide supprime les valeurs d’encodage par défaut fournies par les préréglages, mais pas tous les arguments ajoutés par le Robot. Le Robot /audio/encode ajoute toujours une sélection de flux par défaut afin que les pochettes intégrées ne soient pas encodées comme de l’audio, et déduit le format ou le débit de l’entrée lorsque l’une de ces valeurs est omise. Cet exemple indique explicitement les deux valeurs dans l’objet ffmpeg avec f et b:a.
Cet exemple audio utilise l’objet ffmpeg pour illustrer des paramètres d’encodage explicites avec un préréglage vide. Pour les conversions simples qui ne modifient que le débit ou la fréquence d’échantillonnage, préférez les paramètres documentés bitrate et sample_rate du Robot, au niveau supérieur. Ils acceptent des entiers en bits par seconde et en hertz, par exemple 256000 et 48000, tandis que ffmpeg.b:a accepte des chaînes telles que "128k". Le Robot d’encodage audio applique les valeurs de niveau supérieur après la fusion de ffmpeg ; elles remplacent donc les valeurs contradictoires de b:a ou de ar. Évitez de définir le même réglage à la fois dans l’objet et au niveau supérieur : une valeur de référence est plus facile à examiner, à tester et à modifier.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"podcast_audio": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "empty",
"ffmpeg": {
"f": "ogg",
"codec:a": "libopus",
"b:a": "128k",
"ar": 48000,
"ac": 2,
"af": "highpass=f=80"
},
"result": true
}
}
}Conteneur explicite
L’option f sélectionne le format du conteneur de sortie par l’intermédiaire de son multiplexeur, indépendamment de codec:a ; le conteneur et le codec audio sont donc choisis séparément.
Politique des canaux
L’option ac rend visible le nombre de canaux de sortie demandé au lieu d’hériter d’une disposition inattendue des canaux de la source.
Filtre audio
Une chaîne af peut appliquer les filtres FFmpeg pris en charge, mais chaque filtre nécessite toujours des écoutes et des contrôles de niveau représentatifs.
Utiliser la souplesse de FFmpeg dans le périmètre de sécurité géré
La valeur ffmpeg est un objet d’options structuré, pas une commande shell. Transloadit transforme ses clés et ses valeurs en arguments pour la pile FFmpeg gérée sélectionnée. Ce périmètre offre un contrôle étendu sans exposer la machine hôte du processus de traitement. Cela signifie aussi qu’un Template ne peut pas installer une autre compilation de FFmpeg, ajouter une bibliothèque d’encodage indisponible ni supposer que chaque option de la documentation amont la plus récente existe dans toutes les piles.
Les options contrôlées par l’utilisateur font l’objet de contrôles de sécurité. Les scripts et directives de filtrage qui lisent des fichiers locaux sont rejetés, y compris les entrées de sous-titres, de polices et de texte provenant de fichiers. Utilisez les paramètres de Robot et les Robots dédiés lorsqu’ils sont disponibles, tels que watermark_url, /video/subtitle ou du texte drawtext fourni directement avec une famille de polices disponible. Considérez un rejet comme une limite qui impose de revoir la conception, et non comme une raison de dissimuler une autre commande dans une chaîne de filtre.
Aucune syntaxe shell
Transmettez les noms et les valeurs des options en JSON afin que la gestion des guillemets, l’interpolation et la validation restent dans les Assembly Instructions.
Capacités de la pile
Un encodeur, un multiplexeur ou un filtre doit être intégré à la compilation de la pile gérée sélectionnée pour qu’une option par ailleurs valide puisse fonctionner.
Gestion sécurisée des fichiers
Utilisez des entrées déclarées et des paramètres de Robot conçus à cet effet au lieu de demander à un filtre FFmpeg d’ouvrir des chemins locaux au processus de traitement.
Créer des variantes de codecs sous forme d’Assembly Steps indépendants
Un Step source peut alimenter plusieurs Steps d’encodage indépendants. L’exemple crée des variantes vidéo H.264/MP4 et VP9/WebM ainsi que des sorties audio AAC et Opus. Ces branches ne nécessitent ni boucles côté application ni téléversements répétés : leur valeur use commune déclare la dépendance, et chaque encodage peut s’exécuter après la mise à disposition du fichier source.
Donnez à chaque Step un nom qui décrit le contrat de sortie plutôt qu’un détail d’implémentation susceptible de changer. Une application peut accorder plus d’importance à browser_fallback et à modern_web qu’aux noms actuels des encodeurs. Ne marquez comme résultats que les sorties voulues, exportez chaque variante multimédia destinée à être conservée durablement et conservez l’identifiant de l’Assembly pour qu’un opérateur puisse relier un fichier rejeté au Step exact et aux paramètres qui l’ont produit.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"browser_fallback": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/mp4/720p",
"result": true
},
"modern_web": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/webm/720p",
"result": true
},
"download_aac": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "aac",
"result": true
},
"download_opus": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "opus",
"result": true
}
}
}Source partagée
Les Steps frères lisent le même fichier téléversé ou importé sans obliger l’application à le transférer de nouveau.
Résultats indépendants
Chaque branche de codec possède ses propres entrées de statut, de métadonnées, d’erreur et de résultat pour permettre une gestion précise par l’application.
Noms fondés sur l’usage
Des noms stables dans le contrat permettent à la politique de codecs sous-jacente d’évoluer sans obliger chaque consommateur à renommer son champ.
Versionner le Template et tester les médias produits
Conservez le préréglage, les surcharges FFmpeg et ffmpeg_stack dans un Template enregistré afin que les Jobs de production utilisent une politique unique qui puisse être examinée. La documentation des Robots en production recommande le sélecteur de version majeure v7, tandis qu’une requête qui atteint l’environnement d’exécution de l’API sans sélecteur utilise sa valeur de repli implicite v6 ; les exemples enregistrent donc explicitement v7. Un sélecteur de version majeure choisit la compilation disponible la plus récente au sein de cette version majeure ; par exemple, v7 sélectionne une compilation v7 plutôt que v8. Le sélecteur obsolescent v5 ne correspond plus à une pile valide et sélectionne désormais v6. Testez les changements de pile, de préréglage ou de surcharge en parallèle de la politique actuelle avant de leur acheminer tous les nouveaux Jobs.
Une Assembly réussie prouve que la commande s’est terminée, pas que la sortie respecte le contrat du produit. Consultez les métadonnées des résultats pour connaître les codecs, les dimensions, la durée, la fréquence d’images, le nombre de canaux et la fréquence d’échantillonnage, puis lisez les fichiers sur des clients représentatifs. Conservez des fichiers de test connus pour fonctionner et des fichiers de test difficiles, comparez la taille des fichiers et le coût du traitement, vérifiez la synchronisation audio/vidéo et le déplacement dans la lecture, et gardez une solution de repli pendant le déploiement d’une politique modifiée.
Template contrôlé
Regroupe la politique de codecs et empêche les différents appelants de dériver vers des combinaisons non documentées.
Matrice de fichiers de test
Couvre les codecs sources, les résolutions, les fréquences d’images, les canaux, les métadonnées et les entrées endommagées effectivement reçus en production.
Contrôles de lecture
Vérifiez le décodage, le déplacement dans la lecture, le respect des repères temporels et la qualité sur les clients cibles au lieu de vous fier au statut de sortie de l’encodeur.
Détails techniques à connaître
- Le paramètre
ffmpegest un objet dont les entrées sont fusionnées avec le préréglage sélectionné ; les valeurs fournies dans cet objet priment sur les options correspondantes du préréglage. - Lorsqu’un appelant fournit un objet
ffmpegsans nommer de préréglage, le préréglage vidéo ou audio par défaut n’est pas appliqué, ce qui évite d’hériter de paramètres qu’il faudrait ensuite surcharger. - Le préréglage explicite
emptysupprime les valeurs d’encodage par défaut fournies par les préréglages, mais le Robot peut encore ajouter une sélection de flux ou des valeurs de repli déduites de l’entrée lorsque des valeurs requises sont omises. - Le sélecteur de version majeure
ffmpeg_stackreste dans la version majeure demandée :v7sélectionne la compilationv7disponible la plus récente et ne passe jamais àv8. Les versions majeures prises en charge sontv6,v7etv8. - La documentation des Robots en production recommande actuellement
v7; chaque exemple définit donc explicitementffmpeg_stack: "v7". Une requête qui atteint l’environnement d’exécution de l’API sans sélecteur utilise en revanche la valeur de repliv6. - Le sélecteur obsolescent
v5est accepté pour assurer la rétrocompatibilité, mais ne correspond plus à une pile d’exécution ; une requête qui le nomme est donc mise à niveau de manière transparente versv6. Les sélecteursv6,v7etv8exécutent chacun une compilation de la version majeure demandée. - Une option de conteneur telle que
f: "mp4"ouf: "ogg"ne choisit pas le codec de chaque flux ; les codecs vidéo et audio sont contrôlés indépendamment. Les options de codec de flux acceptent soit la forme longue (codec:v,codec:a), soit les alias FFmpeg courts équivalents (c:v,c:a) ; les préréglages maintenus peuvent utiliser l’une ou l’autre forme, et le Robot considère les deux écritures comme interchangeables. - Le Robot d’encodage audio expose également les paramètres entiers de niveau supérieur
bitrateetsample_rate, mesurés en bits par seconde et en hertz. L’objetffmpegcouvre les options de codec, de format, de canaux, de filtre et les autres options prises en charge, et accepte des valeurs telles que"128k"pourb:a. - Les noms des options FFmpeg sont des clés JSON sans tiret initial ; l’option de ligne de commande
-movflags +faststartest donc représentée par"movflags": "+faststart"dans l’objet. - Transloadit valide les options FFmpeg contrôlées par l’utilisateur au regard d’une politique de sécurité gérée ; la pile sélectionnée doit également contenir l’encodeur, le multiplexeur et le filtre demandés.
- Des Steps indépendants utilisant le même fichier téléversé ou importé peuvent encoder différentes variantes de codecs sans nouveau téléversement, et chaque Step apparaît séparément dans l’Assembly Status et les résultats.
Une approche pratique
- 1
Définissez les lecteurs, appareils, logiciels de montage ou systèmes de distribution avec lesquels chaque sortie doit être compatible.
- 2
Choisissez le préréglage le plus proche et consignez uniquement les surcharges FFmpeg prises en charge nécessaires pour cette cible.
- 3
Exécutez une matrice de données de test couvrant les codecs d’entrée, les canaux, les fréquences d’images et les dimensions réellement utilisés, ainsi que des fichiers endommagés.
- 4
Conservez le Template, le choix de la pile, les contrôles d’acceptation et les sorties approuvées dans une même version contrôlée.
Quand Transloadit est utile
Utilisez /video/encode et /audio/encode lorsqu’un flux de travail nécessite un préréglage documenté, des réglages choisis pour les codecs et le conteneur, des filtres ou plusieurs variantes multimédias à partir d’une seule source. Exécutez la logique d’autorisation et d’approbation des sorties dans votre application, pas dans le Step d’encodage, et exportez les résultats approuvés vers un stockage durable.
Périmètre architectural
Le paramètre ffmpeg expose les options FFmpeg prises en charge au sein des Robots d’encodage gérés ; il ne donne pas accès à un shell, ne permet pas d’installer une autre compilation de l’encodeur et ne garantit pas la disponibilité de toutes les options de chaque version amont de FFmpeg. Les options hors du périmètre de sécurité géré sont rejetées.
Questions fréquentes
Puis-je transmettre n’importe quelle option FFmpeg via l’objet ffmpeg ?
Non. L’objet accepte les options FFmpeg prises en charge, mais Transloadit les valide avant l’exécution et bloque les formes hors du périmètre de sécurité géré. La pile sélectionnée doit aussi contenir l’encodeur, le multiplexeur et le filtre demandés. Testez l’ensemble exact d’options sur des entrées représentatives au lieu de supposer qu’un exemple destiné à une autre compilation de FFmpeg sera utilisable tel quel.
Quand dois-je utiliser un préréglage plutôt que preset: "empty" ?
Utilisez un préréglage nommé lorsqu’il fournit le conteneur, la famille de codecs, les dimensions et le socle de compatibilité souhaités. Ajoutez un petit objet ffmpeg lorsque seuls quelques choix diffèrent. Utilisez preset: "empty" lorsque l’héritage du comportement du préréglage masquerait une politique d’encodage explicite ou entrerait en conflit avec elle, et conservez explicitement le sélecteur ffmpeg_stack: "v7" recommandé par la documentation.
Comment choisir un ffmpeg_stack ?
Utilisez la pile actuellement recommandée, sauf si le flux de travail exige un autre sélecteur de version majeure pris en charge, et conservez ce choix dans le Template enregistré. La documentation des Robots en production recommande v7, que les exemples sélectionnent donc explicitement au lieu de dépendre de la valeur de repli implicite v6 de l’environnement d’exécution de l’API. Avant de migrer un flux de travail en production vers une autre pile, exécutez les mêmes données sources de test, comparez les métadonnées des sorties et leur lecture, puis déployez le Template modifié dans le cadre d’une mise en production contrôlée.
Choisir MP4 ou Ogg détermine-t-il aussi les codecs ?
Non. Un conteneur regroupe des flux, tandis que les codecs définissent la manière dont ces flux vidéo et audio sont encodés. Un fichier MP4 peut donc contenir un codec que le lecteur cible ne prend pas en charge. Précisez et inspectez le codec vidéo, le codec audio, le profil, le format de pixels et les autres exigences de lecture indépendamment du conteneur.
Comment créer plusieurs variantes de codecs à partir d’une seule entrée ?
Créez des Steps de même niveau avec /video/encode ou /audio/encode, qui utilisent tous le même Step source. Donnez à chaque Step un nom stable fondé sur sa fonction, marquez les sorties sélectionnées comme résultats ou exportez-les, puis validez chaque variante indépendante par rapport à sa propre cible de lecture.