Единственный способ получить результаты хорошего качества за один проход - использовать режим с коэффициентом постоянной скорости (CRF). Пожалуйста, прочитайте руководства VP8 и VP9 для получения дополнительной информации.
При установке -crf X каждый кадр кодируется с этим целевым уровнем качества X Однако в кодере применяется дополнительное ограничение в зависимости от битрейта, установленного параметром -b:v:
Если используется -b:v 0 , битрейт может свободно варьироваться в зависимости от исходной последовательности и заданного целевого качества. Это опция, которую вы хотите использовать для «нормального режима CRF», эквивалентного -crf X с x264 .
Если для -b:v задана положительная скорость передачи, это ограничение будет использоваться в качестве максимальной скорости передачи.
Например, в VP8 использование -crf 10 и -b:v 500K для видео 1080p наверняка всегда уменьшит битрейт до 500 кбит / с, а не позволит свободно изменять качество, делая вывод довольно плохим, поскольку видео 1080p требует гораздо больше, чем 500 кбит / с. Установка -crf 10 -b:v 5M будет иметь больше смысла для VP8. Для VP9 обычно требуется более низкий битрейт, поскольку он более эффективен.
Если -b:v не задан вообще, ffmpeg выберет значение по умолчанию 200 кбит / с, что, скорее всего, приведет к плохому качеству (если у вас низкое разрешение, легко кодируемая последовательность). Так что не делайте этого при использовании -crf .
Вы можете проверить настройки кодировщика, посмотрев выходные данные ffmpeg при запуске с -loglevel debug .
В вашем конкретном случае я не вижу ничего плохого в параметрах, кроме, возможно, -speed 2 . Установка этого параметра отключит некоторые функции датчика за счет точности контроля скорости. Удалите эту опцию и посмотрите, улучшит ли это ваше качество.
Обратите внимание, что опция -quality вводит в заблуждение; это устаревшая опция, которая теперь называется -deadline (для получения дополнительной информации см. ffmpeg -h encoder=libvpx ). Единственные жизнеспособные настройки для -quality - good или best (и в realtime , но это для прямой трансляции). по умолчанию это good , так что вам не нужно явно указывать его. best приведет к очень длинному времени кодирования.