Преобразование видео в WebM с помощью ffmpeg / avconv

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 видео) конфигурация кодека

Йерун
источник

Ответы:

53

Примечание: эта информация основана на вики 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документации для получения дополнительной информации.

slhck
источник
4
На данный момент это единственное лучшее руководство по кодированию VP8 во всем Интернете. Молодцы, я бы хотел больше, чем когда-либо!
evilsoup
@evilsoup Спасибо. Я все еще настраиваю его и позже добавлю новую страницу в FFmpeg.
Slhck
Это действительно прекрасный ответ! Теперь я понимаю, почему мое видео всегда было одинакового низкого качества, потому что я фактически всегда использовал значение по умолчанию 256 кбит / с. Большое спасибо!
Джероен
Каковы были различия в размерах между оригинальным mp4 и преобразованным webm?
Switz
1
@ Я только что обновил руководство - заметил, что оно немного устарело. Рад, что вы нашли это полезным.
slhck