Se você está piorando a qualidade, provavelmente é porque você está usando o sinalizador -b incorretamente. Ele usado para se referir apenas à taxa de bits do vídeo, mas com a recente revisão da sintaxe do ffmpeg / avconv, agora se refere à taxa de bits geral. Então o primeiro passo é dizer ao avconv que ele tem 800kbit / s para tocar com o vídeo, mas o segundo passo é dizer que ele tem (800-128) = 672kbit / s para trabalhar.
O que a primeira passagem faz é criar um tipo de roteiro para a segunda passagem para aproveitar - este lugar é uma cena de ação, ele precisa de uma taxa de bits maior; esta é uma conversa lenta, precisa de menos - esse tipo de coisa. Por trabalhar com informações incorretas, o roteiro está incorreto.
Use -b: v no lugar (e -b: a ao invés de -ab), assim:
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
Além disso, muitas dessas opções são possivelmente desnecessárias, já que o avconv usará as mesmas opções que a entrada. A menos que você redimensione o vídeo, omita o -s 640x360
bit. Da mesma forma, a menos que você precise alterar a taxa de quadros, omita o -r 24
e, a menos que realmente precise alterar a taxa de amostragem, omita o -ar 48000
. Obviamente, se você sabe que precisa deles, deixe-os entrar.