web-dev-qa-db-fra.com

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

J'utilise ffmpeg pour encoder mes vidéos et les télécharger sur le Web. J'ai vu ce message sur l'utilisation de ffmpeg, mais je n'ai pas tout à fait compris comment prendre en compte les valeurs.

Supposons que j'ai une vidéo de taille 70 Mo avec une durée de 4 minutes. Comment pourrais-je considérer la valeur de ces indicateurs: -b:v, -maxrate et -bufsize pour 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 valeurs crf sont 19-24? J'apprécierais vraiment votre aide et vos conseils.

10
Robin

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

bufsizedéterminera à quel point ffmpeg religieux permet de garder votre débit binaire constant. Si vous définissez un bufsizede 64k, comme indiqué dans FFmpeg Wiki: Limiter le débit de sortie , il calculera son débit actuel tous les 64 kilo-octets et s’ajustera en conséquence. Des tailles plus petites pour bufsizepeuvent nuire à la qualité car elles ne laissent pas assez d'espace entre les vérifications pour que x264 puisse effectuer des changements soudains. Vous obtiendrez ainsi des blocages.

Si votre maxrateest de 640 kbps et votre bufsizeest de 64k, la vérification tous les dixièmes de seconde par x264 sera vérifiée. Ceci est sous-optimal - FFmpeg Wiki: Encodage pour les sites de streaming recommande de l'exécuter toutes les 1 à 2 secondes. Si cela n’a pas de sens, imaginez-le comme maxratename __/bufsize= fréquence des vérifications. Gardez cette fréquence entre 1 et 2 secondes en règle générale.

Si vous définissez les noms maxrateet bufsizename__, vous devez:

  • définissez maxratesur la vitesse de téléchargement la plus basse possible (dans l'exemple du wiki ffmpeg , il s'agit de 80% de la vitesse de téléchargement totale, mais votre kilométrage peut varier ).
  • définissez bufsizeentre la même chose que maxrate(une seconde) et le double de votre maxrate(2 secondes). Si le niveau n'est toujours pas assez bas, diminuez votre maxratepuis redéfinissez bufsizeen conséquence.

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

Si vous le souhaitez, vous pouvez essayer des valeurs plus faibles pour bufsizename__, comme pour toutes les trois ou quatre secondes, afin de voir comment la valeur change l'apparence de votre sortie. Vous pourrez ensuite déterminer à quel point vous devez vous en préoccuper pour votre vidéo.

En réalité, il n’ya pas de valeur normale. crfoptimise la sortie en fonction de ce qu’elle considère être la meilleure taille de mémoire tampon pour conserver le taux défini. Il essaie de conserver une taille de fichier aussi petite que possible tout en conservant une certaine qualité, au prix de pics occasionnels.

16
Wyatt8740