Concaténer des clips audio : durée et positions de départ
Préparer une concaténation audio devient plus simple lorsque toutes les limites sont connues avant le rendu.
Lancer gratuitement
Ce calculateur reçoit les durées dans l’ordre prévu, les additionne et indique l’instant où chaque clip commence dans la piste assemblée. Le premier débute toujours à zéro, puis chaque position correspond à la somme des durées précédentes. Vous pouvez ainsi préparer des chapitres, sous-titres, décisions de montage, feuilles de repérage, commandes de lecture ou contrôles sans transférer ni traiter le son.
Saisissez les durées dans l’ordre de lecture
Indiquez une durée en secondes pour chaque clip, exactement dans son ordre de diffusion. Les décimales sont acceptées : un clip de 12.375 secondes ne doit donc pas être arrondi. La valeur zéro convient également aux emplacements réservés ou aux éléments sans durée. Chaque nombre doit être fini et positif ou nul, avec un maximum de 10,000 clips par demande. La liste ne peut pas être vide, car une séquence vide ne fournit aucune limite exploitable. Cet outil utilise uniquement les durées : il n’analyse pas les fichiers, ne décode aucun média, ne change pas la fréquence d’échantillonnage, n’ajoute pas de fondu et ne modifie pas le son. Vous pouvez ainsi l’employer au début du processus, lorsque les métadonnées sont disponibles mais que les sources restent distantes, volumineuses ou en attente de validation. Conservez les secondes comme unité commune et utilisez une source de métadonnées cohérente avec le logiciel qui réalisera l’assemblage.
Interprétez la chronologie assemblée
La réponse comprend deux champs. total_duration additionne toutes les valeurs et représente, en secondes, la longueur d’un assemblage sans intervalle. clip_starts est une liste dont les indices correspondent à ceux de l’entrée. Sa première valeur vaut zéro puisque le premier clip commence au début ; chaque valeur suivante cumule les clips antérieurs. Si les deux premiers durent 12.5 et 8.25 secondes, le troisième démarre à 20.75. Les résultats restent des secondes numériques et ne sont pas convertis en horodatages textuels, ce qui facilite leur transfert vers du code, des sous-titres, des manifestes ou des logiciels de montage ayant leurs propres conventions. Les cumuls sont normalisés à douze décimales afin d’écarter les artefacts binaires courants, comme une longue traîne après l’addition de 0.1 et 0.2, tout en préservant une précision supérieure à celle des métadonnées audio usuelles.
Employez les positions sans présumer du rendu final
Considérez ces positions comme le plan déterministe d’une séquence continue, et non comme des mesures prises sur un fichier encodé. Une chaîne multimédia réelle peut modifier le minutage en coupant des échantillons, en ajoutant des fondus enchaînés ou du silence, en rééchantillonnant, en appliquant un remplissage de codec ou en alignant les limites sur des images. Si votre assemblage comprend ces opérations, adaptez les durées à la contribution effective de chaque clip ou vérifiez ensuite le fichier produit. Pour une concaténation directe, les résultats peuvent alimenter chapitres, décalages de transcription, repères de forme d’onde, navigation et contrôles qualité. Ils permettent aussi de confronter une sélection à une durée maximale avant de mobiliser les ressources de rendu. Le calcul étant pur et sans réseau, une même entrée donne toujours la même réponse dans le navigateur et via l’API. Les demandes automatisées coûtent $0.002, tandis que la page effectue gratuitement la planification locale.
Cas d’usage
Créer des repères de chapitre
Transformez les longueurs ordonnées en départs exacts pour les chapitres d’un podcast, d’un cours ou d’un livre audio.
Décaler les repères de transcription
Ajoutez le départ de chaque clip à ses temps locaux avant de réunir les transcriptions.
Contrôler la durée d’une sélection
Calculez la durée complète et toutes les transitions avant d’envoyer les médias au rendu.
Questions fréquentes
Quel est le prix d’une demande API ?
Chaque demande API coûte $0.002. Vous pouvez aussi lancer gratuitement le calcul local dans votre navigateur.
Quelle unité faut-il employer ?
Saisissez toutes les durées en secondes. Les décimales sont admises et les durées comme les positions sont renvoyées en secondes.
Cette capacité assemble-t-elle les fichiers audio ?
Non. Elle calcule la chronologie d’une liste ordonnée, sans transférer, décoder, encoder ni concaténer de média.
La liste des durées peut-elle être vide ?
Non. La durée d’au moins un clip est obligatoire ; une liste vide produit une erreur de saisie.
Les intervalles et fondus enchaînés sont-ils inclus ?
Uniquement si vous les intégrez aux durées fournies. Aucun intervalle ni chevauchement n’est ajouté automatiquement.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/audio/merge-clips \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"durations":[12.5,8.25,3]}'const res = await fetch("https://api.kit.forhosting.com/audio/merge-clips", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"durations": [
12.5,
8.25,
3
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/merge-clips",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"durations": [
12.5,
8.25,
3
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/merge-clips", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"durations":[12.5,8.25,3]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"durations":[12.5,8.25,3]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/merge-clips", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"durations": [
12.5,
8.25,
3
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.merge_clips",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 200 |
max_minutes | 180 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |