web-dev-qa-db-fra.com

Encodage en 2 passes avec avconv

Je ne comprends pas pourquoi la qualité vidéo avec l'encodage multi-passes est pire qu'un seul?

Quand je fais cela, c'est correct:

avconv -i video.mpg -s 640x360 -threads auto \
       -vcodec libxvid -b 800k -r 24 -g 300 -bf 2 \
       -acodec libmp3lame -ac 2 -ab 128k -ar 48000 \
       video.avi

C'est pire:

avconv -i video.mpg -s 640x360 -pass 1 -threads auto \
       -vcodec libxvid -b 800k -r 24 -f avi -an -y /dev/null
avconv -i video.mpg -s 640x360 -pass 2 -threads auto \
      -vcodec libxvid -b 800k -r 24 -g 300 -bf 2 \
      -acodec libmp3lame -ac 2 -ab 128k -ar 48000 \
      video.avi

Qu'est-ce que je fais mal?

5
Tazeg

Si la qualité diminue, c'est probablement parce que vous utilisez le drapeau -b de manière incorrecte. Il tilisé se réfère uniquement au débit vidéo, mais avec la récente refonte de la syntaxe ffmpeg/avconv, il fait maintenant référence au débit global. Ainsi, la première passe indique à avconv qu'il dispose de 800 kbit/s pour jouer avec la vidéo, mais la deuxième passe indique qu'il a (800-128) = 672 kbit/s avec lequel travailler.

La première passe crée une sorte de feuille de route dont la seconde passe doit tirer parti - cet endroit est une scène d’action, il a besoin d’un débit plus élevé; c'est une conversation lente, il en faut moins - ce genre de chose. Parce que cela fonctionne avec des informations incorrectes, la feuille de route est incorrecte.

Utilisez -b: v à la place (et -b: a au lieu de -ab), comme ceci:

avconv -y -i video.mpg -s 640x360 -pass 1 -threads auto -c:v libxvid -b:v 672k -r 24 -f avi -an /dev/null
avconv -i video.mpg -s 640x360 -pass 2 -threads auto -c:v libxvid -b:v 672k -r 24 -g 300 -bf 2 -c:a libmp3lame -ac 2 -b:a 128k -ar 48000 video.avi

De plus, beaucoup de ces options sont peut-être inutiles, car avconv utilisera les mêmes options que l’entrée. Sauf si vous redimensionnez la vidéo, omettez le bit -s 640x360. De même, à moins que vous n'ayez besoin de changer le framerate, omettez le -r 24, et à moins que vous ayez vraiment besoin de changer le taux d'échantillonnage, omettez le -ar 48000. Évidemment, si vous savez que vous en avez besoin, laissez-les dedans.

5
evilsoup