Command Palette

Search for a command to run...

Rejoindre deux clips est un réencodage, pas un collage

Rejoindre deux clips est un réencodage, pas un collage

T
Toolz Team
|Oct 21, 2026|18 min Lire
Préférez Toolz.dev sur Google

Fait partie de la collection Éditeurs

Éditeur vidéo

Rejoignez plusieurs clips dans une seule vidéo, coupez chacun d'eux, réorganisez-les et définissez la résolution, la vitesse et l'audio. Tout s'exécute dans votre navigateur, donc rien n'est téléchargé.

Utilisez le Éditeur vidéo

Mettre deux fichiers vidéo de bout en bout ressemble à l'opération la moins chère au monde, et pendant environ cinq minutes, j'y ai cru. Ensuite, j'ai rejoint un clip 1280x720 à 30fps à un clip 640x480 à 25fps en utilisant la méthode la plus rapide disponible, qui copie les flux et ne réécrit rien. Il a produit un fichier. Le fichier prétendait avoir onze virgule neuf neuf six secondes lorsque les deux clips s'élèvent à onze, le conteneur a indiqué 1280x720 tandis que la seconde moitié du flux était de 640x480, et le muxer a imprimé un avertissement concernant les horodatages réécrits pour chaque image du deuxième clip. Tout ce qui concerne la vidéo de la jonction découle de la raison pour laquelle cela se produit.

tl;dr : La jointure bon marché ne fonctionne que lorsque les deux fichiers sont déjà d'accord sur le codec, la résolution, la fréquence d'images et la base de temps, ce que les images de deux appareils ne le font jamais. La route honnête décode les deux et encode un nouveau fichier, qui est plus lent et produit quelque chose qui joue. Mesurée ici : la méthode de copie a rapporté 11,996 secondes pour 11 secondes de séquences et a déclaré la mauvaise résolution ; le ré-encodage a produit exactement 11 000 secondes à un seul 1 280 x 720 cohérent en 0,63 seconde. Des clips de différentes tailles doivent d'abord être installés dans une seule image, ou la jointure est carrément refusée. le éditeur de vidéos Tout cela dans le navigateur, jusqu'à huit clips et trente minutes.

Pourquoi deux clips ne peuvent-ils pas simplement être collés ensemble ?

Parce qu'un fichier vidéo n'est pas un flux d'images avec un en-tête. Il s'agit d'un conteneur contenant des flux codés et l'encodage est en état.

H.264 comprime en décrivant la plupart des images comme des différences avec les autres images. Une image clé est seule, tout après avoir été défini par rapport à ce qui précède, jusqu'à la prochaine image clé. Le décodeur a également besoin des jeux de paramètres du flux, qui décrivent la résolution, le format de couleur et le profil, et il contient une base de temps qui convertit les nombres sur chaque paquet en secondes.

Deux fichiers créés par deux appareils ne sont d'accord sur rien de tout cela. Une résolution différente signifie différents jeux de paramètres. Une fréquence d'images différente signifie généralement une base de temps différente. Même deux clips du même téléphone, enregistrés à un an d'intervalle, peuvent différer car l'application de l'appareil photo a modifié ses paramètres d'encodeur.

La concaténation des octets vous donne un flux dont le décodeur est dit une chose dans l'en-tête et en est remis à la moitié. Parfois, un joueur s'en sort. Souvent, il affiche le premier clip et s'arrête, ou joue le second sous la forme de bruit coloré.

Que produit la méthode rapide ?

Un fichier, une pile d'avertissements et une durée qui ne va pas.

ffmpeg's Démuxeur concat Avec la copie de flux, la méthode "Juste les joindre à eux" est recommandée, et c'est vraiment le bon outil lorsque les entrées correspondent. Pointé sur mes deux clips incompatibles, il se ferme avec succès, et voici ce qu'il rend :

Mesurer attendu produit
durée 11.000 s 11,996 s
Résolution déclarée Une valeur, correcte 1280x720 pour un flux qui devient 640x480
Avertissements d'horodatage aucun Un par image du deuxième clip

Les avertissements disent tous la même chose :

Non-monotonic DTS; previous: 90981, current: 76133; changing to 90982.
This may result in incorrect timestamps in the output file.

Les horodatages du deuxième clip redémarrent à zéro, comme ils le devraient dans leur propre fichier, et le muxer n'écrira pas un flux dont les horodatages reculent. Il en invente donc de nouveaux, une image à la fois et la différence accumulée entre le timing réel et le timing inventé est d'où vient la seconde supplémentaire.

FFmpeg peut toujours décoder les deux moitiés par la suite, car FFmpeg est exceptionnellement tolérant. Un navigateur ne l'est pas. C'est le fichier qui joue bien sur votre machine et qui affiche un rectangle noir pour un spectateur.

Que coûte la jonction via un graphe de filtre et qu'est-ce qu'il achète ?

Cela coûte un décodage complet et un encodage. Il achète un fichier qui est correct.

Au lieu de copier des flux, chaque entrée est décodée en images, les trames sont coupées et jointes à l'intérieur d'un graphe de filtre, et un nouveau flux est codé à partir du résultat. Chaque image passe par un décodeur et un encodeur, ce qui est un véritable travail.

Ce qu'il achète, c'est que la sortie a un codec, une résolution, une fréquence d'images et un ensemble continu d'horodatages, car tout était codé à la fois. Sur les deux mêmes clips :

Mesurer Méthode de copie Graphique de filtre
durée 11,996 s 11.000 s
Résolution Déclaré 1280x720, devient 640x480 1280x720 partout
encadrements 305 305
Heure d'exportation instant 0,63 s
Taille plus petit 2,1 Mo

0,63 seconde de travail pendant 11 secondes de sortie, sur un bureau exécutant ffmpeg natif. Dans un onglet de navigateur via WebAssembly, il est plusieurs fois plus lent, ce qui est le commerce honnête et la raison pour laquelle le nombre de clips est plafonné.

Pourquoi chaque clip a-t-il besoin de ses horodatages rebasés ?

Parce que la concaténation dans un graphe de filtres joint les flux et que les horodatages d'un flux sont absolus.

Les images de chaque clip arrivent avec des temps de transport mesurés à partir du début de leur propre fichier. Coupez une section à partir du milieu d'un clip et ces images indiquent toujours "Cela se produit à 42 secondes". Rejoignez-les à un clip qui se termine à 6 secondes et vous avez un flux qui passe de 6 à 42, avec 36 secondes de rien entre les deux.

setpts=PTS-STARTPTS Soustrait le propre départ de chaque image de chaque image, de sorte que chaque clip commence à zéro avant de le rejoindre. L'équivalent audio est asetpts. Sans eux, la sortie lit le premier clip, puis un long gel, puis le second. C'est l'erreur la plus courante dans les commandes de jointure ffmpeg manuscrites, et elle est silencieuse : le fichier est valide et la durée est tout simplement erronée.

Que se passe-t-il lorsque les clips sont de tailles différentes ?

La jointure est refusée, et jusqu'à récemment, ce refus était toute l'histoire ici.

le Filtre de rencontre Compare ses entrées et ne s'exécutera pas si les dimensions de la vidéo ou le rapport d'aspect d'échantillon sont en désaccord :

Input link in0:v0 parameters (size 640x480, SAR 1:1) do not match the
corresponding output link in0:v0 parameters (1280x720, SAR 1:1)
Failed to configure output pad on Parsed_concat_8

Il s'agit d'un abandon, pas d'un avertissement : aucun fichier n'est produit. Deux téléphones, ou un clip de téléphone et un enregistrement d'écran, sont exactement le cas qui le déclenchent, et c'est la raison pour laquelle quelqu'un rejoint des clips.

L'audio n'a pas besoin d'une telle aide, ce qui vaut la peine d'être connu car il est contre-intuitif. Le même graphique a joint une piste mono de 44,1 kHz à une piste stéréo de 48 kHz sans plainte et a produit un fichier exact de 11 000 secondes. Seul le côté vidéo est strict.

La solution consiste à établir une image pour toute la chronologie et à y intégrer chaque clip avant de le rejoindre. La hauteur provient de la résolution de sortie que vous avez sélectionnée ou du premier clip lorsque vous conservez la résolution de la source, et la largeur suit le rapport d'aspect de ce clip afin qu'une chronologie des images de portraits reste portrait. Chaque clip est ensuite mis à l'échelle pour s'adapter à l'intérieur de ce cadre et rembourré pour le remplir :

scale=1280:720:force_original_aspect_ratio=decrease,
pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1

L'ajustement plutôt que le remplissage signifie qu'un clip d'une forme différente est en boîte aux lettres au lieu d'être étiré, ce qui est le moindre de deux maux lorsqu'un clip 4:3 rencontre une chronologie 16:9. setsar=1 Ce n'est pas une décoration : le filtre compare le rapport hauteur/largeur des échantillons ainsi que les dimensions des pixels, de sorte que deux clips peuvent être de la même taille et être rejetés.

Les deux dimensions sont arrondies à des nombres pairs, car H.264 dans 4:2:0 stocke la couleur à la demi-résolution dans chaque direction et ne peut pas coder une largeur ou une hauteur impaire.

Pourquoi seulement huit clips et trente minutes ?

Parce que chaque clip coûte un passage de décodage dans un onglet du navigateur et que l'onglet a une quantité fixe de mémoire.

Huit entrées signifient huit décodeurs fonctionnant sur le même graphique de filtre, plus le codeur, ainsi que chaque fichier source conservé en mémoire car il n'y a pas de disque pour diffuser. Trente minutes de sortie sont le point passé que l'encodage prend suffisamment de temps pour que les gens supposent que la page a été suspendue.

Aucune des deux limites n'est une loi du format. Les deux sont la ligne après laquelle la construction du navigateur cesse d'être agréable, et elles sont indiquées à l'avance plutôt que découvertes lorsqu'un onglet plante quarante minutes dans une exportation. Un clip plus court qu'un dixième de seconde est également refusé, car en dessous, il ne contribue pas aux images et aux erreurs FFmpeg plutôt qu'à l'avertissement.

Pour tout ce qui est plus grand, ce n'est pas le bon outil et un éditeur de bureau est le bon.

En quoi la coupe ici est-elle différente de la tondeuse ?

La coupe à l'intérieur d'une jointure est précise et cela ne coûte rien de plus.

le dédié taille-bordure Offre un mode rapide qui copie le flux et ne peut couper qu'une image clé, c'est pourquoi le début d'une garniture atterrit parfois jusqu'à dix secondes plus tôt. son guide Couvre pourquoi en détail.

Ce commerce n'existe pas ici, car l'exportation est de toute façon ré-encodant. La garniture se produit à l'intérieur du graphique du filtre, sur des cadres décodés, de sorte qu'une coupe à 4,3 secondes est une coupe à 4,3 secondes. Vous obtenez une précision de trame gratuitement, en tant qu'effet secondaire du coût que vous payez déjà.

Donc, si vous voulez un clip coupé et rien d'autre, le mode rapide du taille-bordure est beaucoup plus rapide. Si vous rejoignez quelque chose, coupez ici.

Qu'est-ce qu'un changement de vitesse fait à l'audio ?

Il doit être géré séparément, et l'arithmétique n'est pas la même que pour la vidéo.

La vitesse vidéo est une opération d'horodatage : setpts=PTS/2 La durée de présentation de chaque image est de moitié et les cadres eux-mêmes sont intacts. L'audio ne peut pas fonctionner de cette façon, car la lecture d'échantillons deux fois plus rapide augmente le ton et une octave. le atempo Filtrez les rééchantillonnages à la place, en gardant le pitch et en modifiant la durée.

atempo Accepté seulement 0,5 à 2,0 en un seul passage pendant la majeure partie de sa durée de vie, donc un changement de 4x est construit en deux passes 2 fois et un changement de 0,25x au fur et à mesure de deux passages de 0,5. Les constructions actuelles ont relevé le plafond et FFmpeg 8.1 rapporte une fourchette de 0,5 à 100. mesuré sur un seul clip, un seul atempo=4 et un enchaîné atempo=2,atempo=2 débarqué à 11 millisecondes.

La chaîne est toujours ce qui est construit, car le noyau WebAssembly est récupéré au moment de l'exécution plutôt qu'épinglé sur une version, et la multiplication des passes est correcte sur chaque build qui a déjà livré le filtre. La plage de vitesse offerte, de 0,25 à 4 fois, est celle où le résultat est toujours un montage plutôt qu'une nouveauté.

MP4 ou WebM ?

MP4, sauf si vous avez une raison spécifique, et la raison est presque toujours une licence plutôt qu'un argument de qualité.

mp4 Webm
Codec vidéo H.264 vp9
Codec audio analogue à l' opus
joue dans tout Navigateurs, les joueurs les plus modernes
Encoder la vitesse dans un onglet plus vite considérablement plus lent
Taille de qualité similaire plus grand plus petit

VP9 produit des fichiers plus petits pour la même qualité perçue, et il est libre de droits, ce qui compte pour certains projets et pas du tout pour d'autres. FFMPEG's Own Guide d'encodage VP9 est brutal sur le coût de la vitesse. Ce qu'il n'est pas est rapide. Le chemin WebM s'exécute ici à un CRF plus élevé avec un délai en temps réel et cpu-used 5, qui sont des paramètres, un encodage de bureau serait considéré comme négligent, car sans eux, un encodage VP9 dans un onglet prend suffisamment de temps pour se sentir cassé.

Le chemin MP4 utilise -preset veryfast à CRF 23 avec yuv420p, plus -movflags +faststart, qui déplace l'index vers le début du fichier afin qu'il soit lu lors du téléchargement plutôt qu'après.

Quelle sera l'ampleur de l'exportation et combien de temps cela prendra-t-il ?

La taille est prévisible à partir de la résolution. Le temps n'est pas prévisible de quoi que ce soit.

Comme l'exportation ré-encode toujours, la taille du fichier source vous en dit très peu sur le résultat. L'estimation indiquée provient plutôt de la hauteur de sortie : environ 5 Mbps à 1 080 p, 2,5 à 720 p, 1,2 Mbps, avec WebM atterrissant autour de 70 % du chiffre MP4 et un son ajoutant 128 kbit/s.

Il s'agit d'une estimation et est étiquetée comme une, car le contenu compte plus que n'importe quelle formule. Un entretien statique et un panoramique portable à travers des arbres à la même résolution et le même CRF diffèrent plusieurs fois, car le CRF cible un niveau de qualité et dépense le débit qui prend.

Le temps dépend de votre machine, de la résolution, du nombre de clips et de la question de savoir si l'onglet a autre chose à faire. Le FFmpeg natif a géré 11 secondes de sortie en 0,63 seconde, attendez-vous à ce que le navigateur soit plusieurs fois plus lent que cela et attendez-vous à ce que WebM soit à nouveau plus lent.

Ce que cela ne fait pas

Il joins, coupe, réorganise, met à l'échelle, modifie la vitesse et laisse tomber l'audio. C'est l'ensemble des fonctionnalités, et l'écart entre lui et un éditeur vidéo vaut la peine d'être clair.

Il n'y a pas de transitions, pas de titres, pas de piste musicale, pas de correction de couleur, pas de recadrage, pas de volume par clip, pas de clé encadrée, pas d'aperçu de la chronologie terminée. Chaque clip est coupé et placé, un ensemble de paramètres de sortie s'applique à tous et le résultat est codé.

Cela couvre un travail réel et courant : plusieurs enregistrements qui doivent devenir un seul fichier, coupés en parties utiles, dans le bon ordre, à une taille que quelque chose acceptera. Pour tout ce qui implique une décision créative, utilisez un éditeur.

Dans quel ordre les clips entrent-ils et pouvez-vous le modifier ?

L'ordre que vous les avez ajoutés, et oui, avec les boutons haut et bas sur chaque clip.

La réorganisation est une opération de liste plutôt qu'une opération vidéo : le déplacement d'un clip change de l'index qu'il occupe dans le graphique de filtre, et rien n'est relu ou re-décodé jusqu'à ce que l'exportation s'exécute. Ainsi, un mouvement est instantané, aussi volumineux soient-ils, et vous pouvez réorganiser une chronologie autant de fois que vous le souhaitez gratuitement.

Les boutons plutôt que de glisser-déposer est un choix délibéré pour une liste d'au plus huit éléments. Chacun porte une étiquette nommant le clip qu'il déplace, de sorte que l'ordre est modifiable par le clavier et lisible par un lecteur d'écran, dont aucune poignée de glissement ne vous donne beaucoup de travail supplémentaire.

La chose qui vaut la peine d'être vérifiée avant d'exporter est la direction de la séquence. Plusieurs enregistrements du même événement arrivent généralement d'un sélecteur de fichiers par ordre alphabétique, qui est l'ordre dans lequel les noms de fichiers d'un appareil photo produisent et pas toujours l'ordre dans lequel les enregistrements ont été effectués.

Pourquoi cela s'exécute-t-il dans le navigateur ?

Parce que la séquence est généralement celle que vous préférez ne pas télécharger et que le travail n'a pas besoin de serveur.

Chaque opération ici est ffmpeg et ffmpeg Compilation vers WebAssembly. Les fichiers sont lus de votre disque dans l'onglet, décodés, joints là-bas, codés et renvoyés en téléchargement. Rien n'est téléchargé, aucune file d'attente ne contient vos images et aucune copie n'est sur une machine que vous ne contrôlez pas.

Les clips que les gens rejoignent sont des entretiens, consultations, enregistrements familiaux, captures d'écran de logiciels internes, brouillons sous embargo. L'alternative habituelle télécharge plusieurs centaines de mégaoctets sur un service gratuit, la convertit sur du matériel dont vous ne savez rien et le conserve à des termes que personne ne lit.

Les coûts sont les huit clips et les plafonds de trente minutes, et un encodage plus lent qu'un ordinateur de bureau. Les deux sont indiqués avant de commencer, ce qui est le commerce qui vaut la peine d'être pris.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!