Я не понимаю, почему качество видео с многопроходным кодированием хуже одного прохода?
Когда я это делаю, это правильно:
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
Это худшее :
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
Что я делаю не так?
Если у вас плохое качество, возможно, вы неправильно используете флаг -b. Он использовал для обозначения только битрейта видео, но с недавним пересмотром синтаксиса ffmpeg / avconv теперь он относится к общему битрейту. Таким образом, первый проход говорит avconv, что он имеет 800 кбит / с для воспроизведения видео, но второй проход говорит, что он имеет (800-128) = 672 кбит / с для работы.
То, что делает первый проход, это создание своего рода дорожной карты для второго прохода, чтобы воспользоваться - это место - сцена действия, ему нужен более высокий битрейт; это медленный разговор, ему нужно меньше - такого рода вещи. Поскольку он работает с неверной информацией, дорожная карта неверна.
Используйте -b: v вместо (и -b: a вместо -ab), например так:
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
Кроме того, многие из этих опций, возможно, не нужны, так как avconv будет использовать тот же Варианты ввода. Если вы не изменяете размер видео, пропустите бит -s 640x360
. Аналогично, если вам не нужно изменять частоту кадров, пропустите -r 24
, и, если вам действительно не нужно менять частоту дискретизации, пропустите -ar 48000
. Очевидно, если вы знаете, что они вам нужны, оставьте их.