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?
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.