Un client m'a demandé une fois un court enregistrement d'écran d'un bogue. La capture était de 212 Mo pendant quatre minutes, ce qu'un affichage Retina à 60 images par seconde vous coûte, et leur serveur de messagerie l'a fait rebondir deux fois avant que je calcule que la limite de 25 Mo dans le message d'erreur n'était pas le nombre que j'avais à battre. Les pièces jointes sont encodées en base64, de sorte que le fichier arrive environ un tiers plus grand que celui qui le reste. Je devais être à environ 18 Mo, pas 25. L'enregistrement s'est déroulé à 6 Mo, 720p, sans son, et avait l'air parfaitement net, car un enregistrement d'écran d'un bogue est principalement une page statique avec un curseur qui se déplace sur lui et qui se comprime magnifiquement. La leçon utile n'était pas un cadre. C'est que chacun de ces emplois est le même calcul à trois lignes, et une fois que vous pouvez le faire, vous arrêtez de deviner.
tl;dr : Un niveau de qualité ne vous donne pas de taille de fichier, car un facteur à taux constant est une cible de qualité et la taille résultante dépend de la quantité de mouvements de la séquence. Pour atteindre une limite dure, travaillez en arrière : le débit binaire cible en kilobits par seconde est la taille en octets 8, divisé par la durée en secondes, divisée par 1 000. Choisissez ensuite la résolution dont le débit normal se situe sous ce nombre. La suppression de 1080p à 720p permet d'économiser plus que n'importe quel curseur de qualité, et la suppression de l'audio, vous n'avez pas besoin d'enregistrer plus que ce que les gens attendent. le Compresseur vidéo Sur Toolz.dev exécute l'encodage via FFmpeg compilé vers WebAssembly dans votre propre onglet de navigateur, affiche l'estimation avant son démarrage et ne télécharge jamais le fichier.
Pourquoi un réglage de qualité ne vous promet-il jamais une taille ?
Parce que les deux façons les plus courantes de compresser une vidéo répondent à différentes questions, et celle qui produit de meilleurs résultats est celle qui ne peut pas vous dire la taille à l'avance.
Bitrate cible Le mode dit : Utilisez 2 mégabits par seconde, quoi que cela prenne. La taille est alors arithmétique, exactement prévisible, et la qualité oscille sauvagement. Une carte de titre fixe et une photo de pluie à main levée obtiennent tous deux 2 Mbps, de sorte que la carte de titre en perd la majeure partie et la pluie ressemble à du gravier humide.
Facteur de taux constant Le mode dit : conservez cette qualité, dépensez les éléments dont vous avez besoin. Les cadres faciles obtiennent peu de bits, les cadres durs en obtiennent de nombreux et l'image reste visuellement, même du début à la fin. La taille est ce qu'il est.
Chaque encodeur moderne recommande le second pour tout ce qui n'est pas diffusé en direct, et c'est ce que le compresseur utilise ici. Le coût est que le nombre sur la page avant d'appuyer sur le bouton est une estimation, dérivée du débit typique pour cette résolution et cette qualité, et le chiffre réel se déplace avec la séquence. Un enregistrement d'écran statique atterrit régulièrement à la moitié de l'estimation. Des images portables d'eau en mouvement peuvent atterrir dessus. Les confettis, la neige, le feuillage dans le vent et le grain de la caméra sont les quatre choses qui dépassent toute estimation, car toutes sont proches du bruit aléatoire et le bruit est la seule chose avec laquelle la compression ne peut rien faire.
Que choisit le CRF lorsque vous choisissez un niveau ?
L'échelle fonctionne de 0 à 51 pour 8 bits H.264, où 0 est sans perte et 51 est inattaquable, et le Guide d'encodage FFMPEG H.264 Met la valeur par défaut à 23 et la plage de travail sensée à environ 17 à 28. La propriété qui mérite d'être mémorisée est que l'échelle est logarithmique : un changement de 6 à environ 50 000 ou double le débit binaire. Ce fait unique vous indique ce que chaque niveau fait avant de l'essayer.
Le compresseur offre trois, pas un curseur, car la différence entre CRF 26 et 27 est invisible alors que la différence entre 23 et 33 est la totalité du point.
| égaliser | H.264 CRF | VP9 CRF | Audio | A quoi ça sert |
|---|---|---|---|---|
| Lumière | 23 | 31 | 160 kbps | Archiver des copies et des images que vous modifierez à nouveau. Presque assez sans perte visuelle. |
| Équilibré | 28 | 36 | 128 kbps | la réponse ordinaire. Environ la moitié du débit de lumière et sur un écran d'ordinateur portable, vous devez rechercher la différence. |
| Fort | 33 | 42 | 96 kbps | Atteindre une limite dure. Les artefacts commencent à apparaître sur des séquences détaillées, et personne ne se soucie d'un téléchargement de chat. |
Les nombres VP9 sont une échelle distincte, c'est pourquoi ils ne semblent pas liés. Le niveau d'éclairage 31 est exactement ce que Google Recommandations de codage VP9 pour la vidéo à la demande Répertoriez la qualité cible pour 1080p, et le reste de ce tableau vaut la peine d'être conservé en signet : 32 pour 720p, 33 ou 34 pour 480p, 15 pour 4 000.
Qu'est-ce qui permet d'économiser plus d'espace, de qualité inférieure ou moins de pixels ?
Moins de pixels, par une large marge, et ce n'est pas proche.
La résolution est une quantité bidimensionnelle. Passer de 1080p à 720p n'est pas un tiers, il est de 2,07 millions de pixels à 0,92 million, donc l'encodeur a 56% de pixels en moins à décrire avant de prendre une seule décision de qualité. Le fichier suit, à peu près. Passer de 4K à 1080p en enlève les trois quarts.
Voici ce qu'un clip d'une minute atterrit, par hauteur et niveau de source, en utilisant les débits typiques des estimations d'outils. Le son est inclus.
| Source | Lumière | Équilibré | Fort |
|---|---|---|---|
| 4K (2160p) | 106 Mo | 61 Mo | 35 Mo |
| 1080p | 35 Mo | 20 Mo | 11 Mo |
| 720p | 20 Mo | 12 Mo | 7 Mo |
| 480p | 10 Mo | 6 Mo | 4 Mo |
Lisez-le en travers et en bas. Déplacer une étape vers le bas La colonne Qualité permet d'économiser environ 43 %. Déplacer une étape vers le bas La colonne de résolution permet également d'économiser environ 42 %, ce qui ressemble à une égalité jusqu'à ce que vous remarquiez que des étapes de qualité s'épuisent après trois et vous coûtent des objets visibles, tandis qu'une étape de résolution ne coûte rien du tout à l'écran. Un clip 1080p affiché dans un message Slack est affiché dans une boîte d'environ 400 pixels de large.
L'ordre d'essayer, alors : laissez tomber la résolution à tout ce que le spectateur utilisera de manière réaliste, maintiendra la qualité équilibrée et n'obtenez de la force que si vous n'y êtes toujours pas parvenu.
Comment atterrir sous une limite dure comme 8 Mo ?
Travailler à l'envers. L'ensemble du calcul est une ligne, et c'est le seul élément vidéo qui mérite d'être appris.
# total bitrate (kbps) = target size (bytes) x 8 / duration (s) / 1000
#
# 8 MB, 45-second clip:
# 8,000,000 x 8 / 45 / 1000 = 1,422 kbps total
# minus 96 kbps of audio = 1,326 kbps for video
#
# 1080p strong is ~1,400 kbps video -> about 8.4 MB. Just over.
# 720p strong is ~800 kbps video -> about 5.0 MB. Comfortable.
#
# the equivalent single pass, if you have ffmpeg installed:
ffmpeg -i input.mp4 -c:v libx264 -crf 33 -preset fast \
-vf scale=-2:720 -c:a aac -b:a 96k \
-movflags +faststart -pix_fmt yuv420p output.mp4
Trois choses rendent cela fiable dans la pratique.
- Laissez la marge. Visez 80% de la limite. Le CRF n'atteint pas une cible de taille, et la seule fois qu'il dépasse, c'est le moment où vous envoyez le fichier.
- Comptez les frais généraux d'encodage s'ils sont envoyés par e-mail. Base64 représente tous les 24 bits d'entrée en 4 caractères, par RFC 2045, donc une pièce jointe se gonfle d'un tiers sur le fil. Une limite de boîte aux lettres de 25 Mo est d'environ 18 Mo de fichier réel.
- Ne faites pas confiance à un numéro dont vous vous souvenez. La limite de téléchargement gratuite de Discord a été de 8 Mo, puis de 25 Mo, puis de 10 Mo, puis de 20 Mo en août 2026. Gmail a été de 25 Mo pendant des années. WhatsApp recomprend tout ce que vous envoyez malgré tout. Vérifiez la limite le jour où vous en avez besoin, puis faites l'arithmétique.
Si le clip est plus long que la chose que vous souhaitez afficher, le meilleur coup est de le couper plutôt que de le presser. La moitié de la durée de moitié la taille à la pleine qualité, ce qui ne peut correspondre à aucun réglage. le taille-bordure Sautera la portée sans ré-encoder du tout lorsque la coupe atterrira près d'une image clé, et le résultat est une séquence d'octet-identique à la moitié de la taille.
Est-ce que baisser la fréquence d'images est utile ?
Moins que vous ne le pensez, et cela semble pire que toute autre chose sur la liste.
La raison en est que les trames consécutives se compriment déjà. Un codec vidéo stocke une image pleine image, puis décrit les différences, de sorte que la trame 31 dans un clip de 60 ips est presque gratuite, car elle est presque identique à la trame 30. Le jeter n'économise pas les bits que vous imaginez, il les enregistre. À des tarifs typiques, l'économie est plus ou moins linéaire que gratuite, de sorte que 60 ips à 30 ips décollent peut-être un tiers au lieu de la moitié, et 30 ips à 15 ips vous donnent un judder visible sur n'importe quel mouvement de la caméra.
Il y a deux cas où c'est la bonne affaire. Un enregistrement à l'écran de contenu principalement statique ne perd rien de lisible à 15 ips, et c'est exactement le cas où vous essayez généralement le plus de vous limiter. Et les images que vous convertissez en une animation pour une page, où le spectateur ne regarde pas le mouvement, ne le remarque pas, survit à une amende de 12 à 15 fps.
Pour tout ce qui a une personne ou une caméra, laissez la fréquence d'images tranquille et réduisez la résolution à la place.
L'audio devrait-il survivre ?
Demandez à quoi sert l'audio, car il n'est pas gratuit.
Un enregistrement de 10 minutes avec un son à 128 kbit/s est d'un son de 9,6 Mo avant que l'image ne reçoive un seul bit. Si cet audio est une capture d'écran silencieuse avec une bourdonnement de chambre, ou de la musique que vous allez remplacer, ou une piste vocale que vous avez déjà transcrite, la suppression est la plus simple d'économie disponible et cela ne coûte rien au spectateur. Le compresseur a un interrupteur pour exactement cela, qui passe -an et omet entièrement le flux audio.
Lorsque le son est important, les niveaux le baissent de 160 à 128 à 96 kbps, qui sont les points conventionnels. 96 kbps AAC est suffisant pour la parole et la musique est mince. Si vous souhaitez que l'audio seul, en tant que fichier transcrire ou édite, Extracteur audio Tirez la piste sans toucher la vidéo, et le Convertisseur audio va le ré-encoder selon ses propres termes.
Un détail attire les gens. Une vidéo sans piste audio est lue en silence dans la plupart des lecteurs et ne parvient pas à lire automatiquement dans quelques anciens navigateurs mobiles qui attendent d'une traque. Si le clip est entré dans une page Web, une piste silencieuse à 8 kbps est parfois plus sûre que rien, bien que chaque navigateur expédié aujourd'hui gère correctement un MP4 vidéo.
Webm vaut-il l'attente supplémentaire ?
Cela dépend entièrement de qui ouvre le fichier.
VP9 dans un conteneur WebM atterrit environ un quart de moins que H.264 avec une qualité visible comparable. C'est un gain réel, et sur votre propre site, où la seule exigence est qu'un navigateur puisse y jouer, WebM est généralement le meilleur fichier. Chrome, Firefox et Edge prennent en charge VP9 depuis une décennie, et Safari a depuis la version 14.
Le coût apparaît deux fois. L'encodage VP9 est plus lent que x264, considérablement dans un navigateur, et un détail déclenche toute personne exécutant la commande à la main : VP9 n'honore qu'un objectif de qualité lorsque le débit est explicitement nul. adopter -crf 36 À lui seul, l'encodeur utilise à la place un débit par défaut et vous ignore. il a besoin -crf 36 -b:v 0, c'est ce que l'outil envoie.
Le deuxième coût est tout ce qui n'est pas un navigateur. Applications de chat, champs de téléchargement CMS, éditeurs vidéo, PowerPoint, le volet d'aperçu dans un gestionnaire de fichiers, votre téléphone client : beaucoup acceptent le MP4 et les haussent sur WebM. Si le fichier est envoyé à une personne, envoyez un MP4 avec H.264. S'il entre dans une page que vous contrôlez, WebM. Cette même répartition s'exécute dans toute la question du format, que le Guide des remux Couvertures du côté de la conversion.
Pourquoi un MP4 compressé refuse-t-il parfois de commencer à jouer ?
En raison de l'endroit où l'index s'est retrouvé, et c'est le seul drapeau que vous ne devriez jamais laisser.
Un MP4 conserve une table des matières décrivant le point de départ de chaque image. Ecrit normalement, l'encodeur découvre tout cela au fur et à mesure et écrit la table à la fin du fichier. Pour la lecture à partir d'un disque qui est très bien. Servi sur HTTP, cela signifie que le lecteur ne peut pas commencer tant qu'il n'a pas le fichier entier, donc une vidéo de 40 Mo dans une application de chat ou un CMS reste là à ne rien faire pendant qu'elle télécharge, puis démarre.
-movflags +faststart fait un deuxième passage sur le fichier fini et déplace cette table vers le devant. L'encodage prend un instant plus longtemps et la vidéo commence à jouer après une seconde. Chaque MP4 produit par le compresseur.
Deux autres drapeaux dans cette commande sont là pour la compatibilité plutôt que pour la taille. -pix_fmt yuv420p Forces 4:2:0 Chroma sous-échantillonnage, car un MP4 4:2:2 ou 4:4:4 est valide et refuse de jouer sur une longue liste de décodeurs matériels. Et le filtre d'échelle est écrit scale=-2:720 plutôt que scale=-1:720, parce que H.264 nécessite des dimensions de pixels et -2 Arrondit la largeur calculée à un nombre pair. Demandez une largeur impaire et l'encodage échoue avec "largeur non divisible par 2" plutôt que de passer à quelque chose de proche.
Pourquoi la compression est-elle si pire que la compression ?
Perte de génération, et il est plus raide que les gens ne le pensent, car la compression avec perte n'est pas idempotente.
Le premier encodage jette les détails qu'il juge que l'œil ne manquera pas et laisse derrière lui ses propres artefacts : légers blocages sur les bords, dégradés lissés, sonnerie autour d'un contraste élevé. Le deuxième encodage n'a aucun moyen de savoir que ces artefacts ne sont pas l'image. Il les traite comme du contenu qui mérite d'être préservé, dépense des BIT à les décrire et ajoute le sien. Trois tours de compression équilibrée sur le même clip semblent pires qu'un tour de fort, à une taille de fichier plus grande.
Les règles pratiques sont donc courtes. Compressez à partir de l'original à chaque fois, jamais de la copie que vous avez déjà faite. Si vous avez besoin à la fois d'une version d'archives légères et d'une petite version à envoyer, faites les deux à partir de la source. Et si un fichier est déjà passé par une plate-forme qui recompresse lors du téléchargement, qui est la plupart d'entre eux, traitez déjà ce que vous avez téléchargé comme une deuxième génération.
C'est la même arithmétique qui régit Compression d'images Et la raison pour laquelle un JPEG a sauvé se transforme à plusieurs reprises en boue, et la même raison pour laquelle le Compresseur PDF Fonctionne sur les images dans un document plutôt que sur le document dans son ensemble.
Le fichier laisse-t-il votre machine ?
Non, et pour la vidéo qui change l'utilité de l'outil.
L'encodage passe FFMPEG compilé dans WebAssembly, Exécution dans l'onglet du navigateur. Le fichier est lu de votre disque dans la mémoire de page, codé là et renvoyé en téléchargement. Ouvrez DevTools, passez au panneau réseau, compressez quelque chose et regardez : aucune demande ne porte la vidéo.
Trois conséquences suivent.
Rien n'est téléchargé, donc rien n'est retenu. Aucune copie ne se trouve sur un serveur en attente d'une politique de rétention pour la supprimer, car aucune copie n'a été effectuée. Pour une démonstration de produit inédite, des images sous NDA ou quoi que ce soit avec une personne qui n'a pas accepté un téléchargement tiers, c'est la différence entre utilisable et non.
Les limites sont les navigateurs, pas un plan. Le fichier entier va dans la mémoire des onglets, de sorte que la page accepte jusqu'à 500 Mo et limite un seul passage à 30 minutes, et il vérifie les deux lorsque vous choisissez le fichier plutôt qu'après un téléchargement de moteur de quatre mégaoctets et deux minutes d'encodage. Il n'y a pas de file d'attente, pas de filigrane, pas de compte et pas de niveau de taille à acheter.
La première course est plus lente. Le pack WebAssembly FFmpeg est téléchargé une fois, ce qui prend quelques secondes, et est mis en cache par la suite. L'outil le charge lors de la première compression plutôt que lorsque la page s'ouvre, de sorte que la page elle-même reste rapide.
Quand un encodeur de bureau est-il le bon outil ?
Lorsque les nombres ci-dessus cessent d'être la contrainte. Un onglet de navigateur est un encodeur raisonnable et un mauvais pipeline vidéo, et il vaut la peine de savoir où la ligne tombe.
Accédez aux fichiers natifs de plus de 500 Mo ou de clips sur une demi-heure, où la mémoire de tabulation est la limite réelle. Accédez à un lot en natif, car 40 clips dans une boucle dans un shell bat 40 trajets via n'importe quelle interface. Allez natif lorsque vous avez besoin d'un encodage à deux passes pour atteindre une taille exacte, ce qu'un seul pass CRF ne peut pas promettre. Et optez pour l'encodage matériel, où un GPU fera en 20 secondes ce que WebAssembly prend quatre minutes.
Pour un clip qui doit être sous une limite dans les cinq prochaines minutes, sur un ordinateur portable, sans rien installer ni remettre les images à un étranger, le navigateur est le chemin le plus rapide de loin. C'est le travail le compresseur est construit pour, à côté de la convertisseur pour changer de format et le compresseur d'image Pour le même problème, une dimension vers le bas.



