18

Пытаясь оптимизировать размер своих домашних видео, я преобразовал некоторые из них в WebM в качестве теста, используя Pitivi на Xubuntu. Разница в размерах значительна. Итоговый webm-файл составляет всего около 10% от исходного файла, в то время как качество изображения для меня выглядит примерно так же.

Я также попытался выполнить преобразование с помощью avconv чтобы я мог написать его, но полученный файл выглядит действительно дрянно. Посмотрев настройки рендеринга в Pitivi, я попробовал некоторые параметры: avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webm , но качество по-прежнему выглядит как дерьмо, поэтому, кажется, я пропускаю / использую некоторые неправильные параметры Кто-нибудь знает, какие параметры следует использовать для преобразования фильма h264 в веб и получения того же качества, что и в Pitivi?

Это настройки в Pitivi:создание проекта PitiviРендеринг в WebM (HTML5 видео)конфигурация кодека

1 ответ1

54

Примечание. Эта информация основана на вики FFmpeg на кодировке VP9. Пожалуйста, обратитесь к этой статье для получения дополнительной информации - она будет постоянно поддерживаться и расширяться. Для достижения наилучших результатов вы должны использовать последнюю версию ffmpeg , загрузив ее со своего веб-сайта (достаточно статической сборки; она содержит libvps-vp9 ).

Переменная битрейт

Кодирование VBR дает вам оптимальное общее качество, поскольку кодер может свободно выбирать, сколько битов назначить кадру. Выберите этот режим, если вы не готовите видео для потоковой передачи с постоянным битрейтом.

Вариант 1: кодирование постоянного качества

Как правило, если вы не хотите указывать определенный размер файла, вы должны позволить битрейту свободно варьироваться, так как это приведет к высочайшему качеству. Вы можете сделать это, установив битрейт на 0 и коэффициент постоянной скорости (CRF) на целевой уровень качества:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Значение CRF может быть от 0 до 63. Более низкие значения означают лучшее качество. Рекомендуемые значения варьируются от 15 до 35, причем 31 рекомендуется для видео высокой четкости 1080p. У Google есть руководство с дополнительной информацией об этом.

Вариант 2: двухпроходное кодирование с целевым битрейтом

Если вы хотите, чтобы у вашего файла была определенная целевая скорость передачи данных или размер файла, вам нужно указать скорость и использовать двухпроходное кодирование (которое обеспечит оптимальное качество распределения). Здесь мы выбираем 5 Мбит / с, чего должно быть достаточно для контента 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Пользователи Windows должны использовать NUL вместо /dev/null и ^ вместо \ .

Постоянный битрейт

Прежде всего, libvpx предлагает режимы кодирования с постоянной и переменной битрейтами. Всегда следует избегать постоянного битрейта (если только вы не нацелены на определенный размер файла или сценарий потоковой передачи), так как среднее качество на размер файла будет хуже. Тем не менее, вы можете попробовать установить постоянный битрейт, если у вас больше ничего не работает, например, с 1 Мбит / с:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Посмотрите на вывод и увеличьте или уменьшите скорость передачи данных по своему вкусу (или ограничения размера файла). Например, вы можете использовать 500K или 5M и так далее.

Вы должны указать -minrate , -maxrate и битрейт -b:v чтобы кодировщик использовал CBR. Все они должны иметь одинаковое значение - в противном случае он выберет другой целевой битрейт и будет выполнять кодирование VBR, но с плохим качеством.

аудио

Текущий выбор аудиокодека для кодирования VP9 - Opus. FFmpeg выберет необходимый кодер и его параметры по умолчанию. Если вы хотите явно установить -c:a libopus , вы также можете сделать это. Обратитесь к документации libopus для получения дополнительных опций.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .