Qu'est-ce que l'option "sameq" ou "same_quant" dans FFmpeg? Cela signifie-t-il «même qualité»?


29

Souvent, j'ai vu des commandes FFmpeg utiliser l' sameqoption, par exemple

ffmpeg -i input.mp4 -sameq output.avi

Qu'est-ce que ça veut dire? Cela signifie-t-il "même qualité"? Sinon, que dois-je utiliser à la place?

Réponses:


57

sameq ne signifie pas "même qualité"

Plusieurs ressources sur le Web encouragent l'utilisation de l' option sameqou same_quant, mais en substance, elles ont tort. L'utilisation sameqne vous donne pas un résultat avec la même qualité que l'entrée.
Ne l'utilisez jamais.

La source de la confusion était une documentation mal écrite qui impliquait que l'utilisation de cette option fournirait la même qualité. Heureusement, l'option a été supprimée.

Voici ce que la documentation FFmpeg a dit:

Notez que ce n'est pas la même qualité. N'utilisez cette option que si vous savez que vous en avez besoin.

En fait , les développeurs FFmpeg avaient changé le nom de sameqla same_quantjuste pour se assurer, puis retiré sameq/same_quant tout à fait; ce qui signifie que cette option n'existe pas dans FFmpeg récent, mais cet article est toujours utile pour ceux qui utilisent des versions FFmpeg plus anciennes.


Comment fonctionne la compression vidéo?

Maintenant que nous avons clarifié cela, entrons dans certains détails techniques.

Pour comprendre pourquoi cela ne fonctionne pas de manière fiable, nous devons saisir le concept de ce que signifie la «qualité» pour un encodeur vidéo commun et ce qui influence la qualité. Pourquoi une vidéo est-elle meilleure que l'autre lorsqu'elle est compressée avec des débits binaires différents? Qu'est-ce qui fait une perte de conversion et pourquoi la vidéo est-elle plus petite que l'original après l'encodage?

Lorsque vous encodez une vidéo, vos données d'entrée sont converties dans une dimension différente en appliquant d'abord une transformation mathématique à des blocs de pixels. Cette transformation, principalement une transformation cosinus discrète , produit une matrice de nombres qui décrivent, disons, un champ de 8 × 8 pixels dans la vidéo.

Ainsi, vos pixels 8 × 8 et la matrice correspondante ressembleraient initialement à ceci: 1

Image originale  

Mais c'est trop de données! Si nous voulons compresser la vidéo, nous pouvons réellement nous débarrasser des chiffres vers le bas à droite. Je n'expliquerai pas pourquoi c'est exactement, mais disons simplement que les chiffres en haut à gauche sont plus importants lors de la description d'un tel bloc. L'idée principale de la transformation est de mettre les choses importantes en haut à gauche.

Pour supprimer les chiffres en bas à droite, nous pouvons les faire des zéros. Si quelque chose n'est "rien", ou se répète simplement comme 0s, nous n'aurons pas à le stocker, et ainsi nous économiserons de l'espace. Mathématiquement, nous devons quantifier cette première matrice en appliquant une autre matrice, une "matrice de quantification".

Cela se traduira par une matrice qui contient désormais beaucoup moins de nombres et beaucoup de zéros:

Image compressée  

Le résultat de cela est que nous avons transformé la première matrice de haute qualité avec beaucoup de nombres en une matrice qui ressemble toujours aux mêmes 8 × 8 pixels, mais avec moins de qualité car elle a moins de nombres pour décrire ces pixels. Si vous comparez le bloc visuellement, ils sont similaires, mais plus tout à fait les mêmes.

Ici, la matrice de quantification détermine la qualité . C'est important. Nous pouvons utiliser différentes matrices de quantification pour différentes qualités. Certaines matrices de quantification laissent la matrice d'origine presque intacte, d'autres non. Plus nous supprimons de nombres, plus la qualité est mauvaise , mais plus nous pouvons compresser la vidéo, car nous pouvons essentiellement "jeter" les zéros ici.

Qu'est-ce que cela a à voir sameq?

Supposons que vous encodiez une vidéo et que vous souhaitiez définir une certaine qualité. Comme nous l'avons déjà appris, différentes matrices de quantification conduisent à une qualité différente, donc lorsque nous demandons à notre encodeur d'utiliser la qualité x, il sélectionnera la matrice de quantification appropriée ypour obtenir cette qualité, quelle qu'elle soit. Le résultat est une vidéo compressée à l'aide de la ymatrice. 2

Et voici la partie intéressante: sameqsignifie "même quantificateur". Pas "même qualité". Si vous avez une version non récente de FFmpeg, vous pouvez toujours la trouver dans ffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

Ainsi, lorsque vous prenez maintenant cette vidéo convertie et que vous l'encodez à nouveau, et que vous appliquez l' sameqoption, FFmpeg sélectionne simplement les mêmes matrices de quantification que celles utilisées pour la vidéo d'entrée.

Cela fonctionne quelque peu lorsque vous utilisez exactement le même codec pour l'entrée et la sortie, par exemple lors de la conversion d'une vidéo XviD en une vidéo XviD, mais vous vous retrouverez toujours avec une qualité pire. 3 C'est parce que le fait d'encoder quelque chose qui est déjà encodé jettera encore plus d'informations. Dans l'exemple ci-dessus, nous créerons encore plus de zéros dans notre matrice et le résultat sera pire.

Il ne fonctionne pas du tout sur différents codecs vidéo. Supposons que vous convertissez une vidéo encodée en XviD avec x264. 4 Pour ces deux codecs, les matrices de quantification utilisées en interne sont différentes - elles n'ont pas les mêmes coefficients. Cette option n'a donc même aucun sens! Malheureusement, FFmpeg vous permet toujours de l'utiliser.

Conclusion: veuillez ne pas utiliser cette option sauf si vous savez précisément ce que vous faites. Si vous souhaitez encoder votre vidéo avec un codec différent, mais conserver la qualité, vous devrez expérimenter et simplement définir la qualité vous-même. Vérifiez si le résultat est satisfaisant et sinon, définissez une qualité supérieure. C'est à peu près autant que possible.

Enfin, si vous souhaitez savoir comment conserver votre qualité lors du ré-encodage, consultez ces articles:


1) La matrice ne correspond pas vraiment à l'image ici. C'est juste un exemple.
2) En fait, de nos jours, la plupart des processus de codage n'utilisent pas qu'une seule matrice. Lorsque vous définissez un certain débit binaire, l'encodeur utilisera différentes matrices pour obtenir un débit binaire moyen par seconde. De même, lors de la définition d'une certaine qualité, les encodeurs modernes utilisent différentes matrices en fonction du contenu. En effet, certains contenus sont plus faciles à compresser que d'autres et nécessitent moins de quantification pour obtenir le même facteur de compression.
3) Exemple: ffmpeg -i input.avi -sameq -c:v libxvid output.avi. Ne l'utilisez pas. S'il vous plaît.
4) Exemple: ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. Ne l'utilisez pas non plus. Je suis serieux.


-sameqoption a été déconseillée puis supprimée d'avconv
AzizSM
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.