Comment considérer le bitrate, -maxrate et -bufsize d'une vidéo pour le Web


13

J'utilise ffmpeg pour encoder mes vidéos pour les télécharger sur le web. J'ai vu ce post sur l'utilisation de ffmpeg, mais je n'ai pas vraiment compris comment prendre en compte les valeurs.

Supposons que j'ai une vidéo de 70 Mo avec une durée de 4 minutes. Comment pourrais - je tenir compte de la valeur de ces drapeaux: -b:v, -maxrateet -bufsizepour cette commande?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output

Ou existe-t-il une valeur normale, comme pour les crfvaleurs 19-24? J'apprécierais vraiment votre aide et vos conseils.


L'encodage vidéo est un art et il y a des centaines de paramètres à maîtriser. Notez que l'encodage à deux passes offrira (beaucoup) une meilleure qualité et compression dans la plupart des scénarios que de jouer avec des débits binaires. Habituellement, la taille finale et le débit binaire vidéo dépendent principalement de la taille de la sortie vidéo. ffmpeg est généralement assez intelligent pour choisir maxrate et bitrate si vous lui dites de conserver la même qualité vidéo. Notez également que la création d'une vidéo d'une largeur de 480 pixels est suffisamment bonne dans la plupart des scénarios, ce qui économisera beaucoup plus de bande passante que la lecture avec des débits binaires.
earizon

1
@earizon Je suis d'accord, l'encodage vidéo est un art et 480 est généralement assez bon. Cependant, j'aime aussi avoir des résolutions plus élevées car je n'utilise plus de CRT à 640x480. C'est certainement une meilleure façon de réduire les tailles que de jouer avec les débits binaires, mais encore une fois, j'aime les options.
Wyatt8740

Réponses:


20

Cela dépend vraiment de votre vitesse de téléchargement.

bufsizedéterminera à quel point ffmpeg est religieux pour garder votre débit constant. Si vous définissez une valeur bufsizede 64 Ko, conformément au Wiki FFmpeg: limitation du débit binaire de sortie , il calculera son débit binaire actuel tous les 64 kilo-octets et ajustera en conséquence. Des tailles plus petites bufsizepeuvent nuire à la qualité dans la mesure où elles ne laissent pas suffisamment d'espace entre les vérifications de x264 pour effectuer des changements soudains - vous obtiendrez un blocage.

Si votre maxrate640kbps et votre bufsize64k, alors chaque dixième de seconde x264 vérifierait. Ceci n'est pas optimal - FFmpeg Wiki: Encoding for streaming sites recommande de l'exécuter toutes les 1 à 2 secondes. Si cela n'a pas de sens, pensez-y comme maxrate/ bufsize= fréquence des contrôles. Gardez cette fréquence entre 1 et 2 secondes en règle générale.

Si vous définissez les deux maxrateet bufsize, vous devez:

  • réglé maxratesur quelle que soit votre vitesse de téléchargement la plus basse (dans l' exemple wiki ffmpeg , cela représente 80% de la vitesse de téléchargement totale, mais votre kilométrage peut varier).
  • réglé bufsizequelque part entre le même que votre maxrate(une seconde) et deux fois votre maxrate(2 secondes). Si ce n'est toujours pas assez bas, abaissez votre maxratepuis réinitialisez en bufsizeconséquence.

Ensuite, vous devrez jouer un peu, mais comme vous devez commencer quelque part, je commencerais à maxrateenviron 600k, ce qui était généralement assez satisfaisant pour moi avant de l'utiliser crfpour tout.

Si vous le souhaitez, vous pouvez essayer des valeurs inférieures pour bufsize, comme toutes les trois ou quatre secondes, juste pour voir comment la valeur change à quoi ressemble votre sortie. Ensuite, vous pouvez déterminer combien vous devez vous en préoccuper pour votre vidéo.

Il n'y a vraiment pas de valeur normale - ce qui crffait est d'optimiser la sortie en fonction de ce qu'elle pense être la meilleure taille de tampon pour maintenir ce que son taux est fixé. Il essaie de conserver une taille de fichier aussi faible tout en conservant une certaine qualité, au prix de pointes occasionnelles.


1
Ne devrait pas "définir bufsize à quelque part entre le même que votre maxrate (une seconde) et la moitié de votre maxrate (2 secondes)" être "réglé bufsize à quelque part entre le même que votre maxrate (une seconde) et deux fois votre maxrate (2 secondes) "?
Ely

@Ely, je pense que vous avez raison. Le mien le ferait toutes les demi-secondes. Je vais arranger ça!
Wyatt8740

@ Wyatt8740 Désolé, j'étais très occupé. Une seule question cependant. Si j'utilise crf, alors je n'ai pas besoin de préciser bitrate, buffsizeet maxrate? Et si oui, lequel est le plus efficace (utilisez crfou bitrate, buffsizeet maxrate)?
Robin

@Robin Vous pouvez utiliser bufsize et maxrate avec crf. Rappelez-vous, crf ajustera le bitrate à la volée pour correspondre à une certaine qualité, et si des parties de la vidéo sont très complexes, le bitrate tournera à un niveau élevé et vous ne le voulez probablement pas, alors mieux vaut "verrouiller" avec bufsize et maxrate (mais pas trop strict, ou votre vidéo ressemblera à de la merde! :))
Ely

@Robin correct, vous ne devriez pas avoir besoin d'utiliser crf avec les autres. Cependant, vous pouvez le faire si vous souhaitez le contraindre. crf essaie de maintenir une qualité constante - vous pouvez le forcer à le faire dans les limites avec bufsizeet maxrate. bitrateMais vous n'en avez pas besoin . Comme l'a dit Ely, cela le rendra meilleur pour le streaming.
Wyatt8740
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.