Souvent, j'ai vu des commandes FFmpeg utiliser l' sameq
option, 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?
la source
Souvent, j'ai vu des commandes FFmpeg utiliser l' sameq
option, 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?
sameq
ne signifie pas "même qualité"Plusieurs ressources sur le Web encouragent l'utilisation de l' option sameq
ou same_quant
, mais en substance, elles ont tort. L'utilisation sameq
ne 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 sameq
la same_quant
juste 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.
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
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 0
s, 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:
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.
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 y
pour obtenir cette qualité, quelle qu'elle soit. Le résultat est une vidéo compressée à l'aide de la y
matrice. 2
Et voici la partie intéressante: sameq
signifie "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' sameq
option, 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.
-sameq
option a été déconseillée puis supprimée d'avconv