ОБНОВЛЕНИЕ 3 АВГУСТА 2017: Согласно новому ответу пользователя 林正浩, ffmpeg теперь поддерживает кодирование VP9 через VAAPI. У меня все еще нет оборудования, необходимого для тестирования, хотя мой ответ будет иметь ограниченную помощь. Я оставлю свой оригинальный ответ о том, как кодировать VP9 в программном обеспечении ниже.
По какой-то причине FFmpeg не поддерживает кодирование VP9 на аппаратном кодере Intel QuickSync, хотя они поддерживают H.264 и HEVC. Поиск в репозитории исходного кода FFmpeg показывает, что это даже не вопрос его отключения, эта функция просто еще не реализована. Но если он станет доступным в какой-то момент в будущем, его следует использовать аналогично другим кодировщикам QuickSync: переключатель, например -c:v vp9_qsv
вместо -c:v libvpx-vp9
должен выполнять эту работу.
Использование командной строки FFmpeg одинаково на всех платформах, за одним известным исключением, которое я знаю, поскольку пользователям Windows приходится использовать NUL
вместо /dev/null
для вывода во время первого прохода двухпроходного кодирования. Но так как вы делаете 1-проход и без потерь, это не должно повлиять на вас.
Если вы хотите ускорить кодирование, самое очевидное, что вы должны попробовать - установить значение скорости кодирования с помощью ключа -speed
. Рекомендуемыми значениями являются числа от 0 до 4, где 0 очень, очень медленный (подумайте -preset placebo
в x264, но хуже), но высокое качество, а 4 - быстрое и низкое качество. ffmpeg по умолчанию использует -speed 1
, что является хорошим соотношением скорости и качества для кодирования с потерями. Однако я только что провел быстрый тест на кодирование без потерь с различными значениями скорости и заметил, что размер файла уменьшился на 32% при переходе от -speed 1
к -speed 0
с кодированием без потерь. Время кодирования утроилось, так что стоит ли использовать 0, зависит только от вас. Файл, созданный с помощью -speed 4
был на 1,1% больше, чем файл, созданный с помощью -speed 1
, и был закодирован на 43% быстрее. Так что я бы сказал, что если вы делаете без потерь и -speed 0
слишком медленный, вы можете также использовать -speed 4
.
Другим важным повышением производительности кодирования является включение многопоточности с помощью -threads
; libvpx не использует автоматически несколько потоков, поэтому пользователь должен установить это вручную. Вы также должны установить количество столбцов тайлов с помощью -tile-columns
. Эта опция заставляет libvpx разделять видео на несколько фрагментов и кодировать эти фрагменты параллельно для лучшей многопоточности. Рекомендованные числа для количества столбцов и потоков листов можно найти в разделе "Рекомендации по составлению листов и потоков" руководства Google по кодированию VP9 . Как вы можете видеть, количество используемых потоков увеличивается с количеством плиток, что означает, что в зависимости от количества доступных ядер ЦП ваш процессор может не быть полностью насыщенным при кодировании видео с разрешением ниже HD. Если вы в основном кодируете видео с низким разрешением, вы можете рассмотреть возможность кодирования нескольких файлов одновременно.
Однако есть еще один способ ускорить кодирование VP9: многопоточность в пределах одного столбца, который можно включить с помощью -row mt 1
. По состоянию на 4 апреля (2017, привет, будущие люди), он не является частью выпущенной версии libvpx, но, скорее всего, будет в libvpx 1.6.2. Если вы хотите попробовать его до следующего выпуска, вам нужно скомпилировать последние версии git libvpx и ffmpeg из исходного кода. Просто следуйте руководству по компиляции FFmpeg для вашего дистрибутива, но вместо того, чтобы загружать и извлекать архив релиза, вместо этого сделайте git pull https://chromium.googlesource.com/webm/libvpx
.
Что касается пресета veryslow
, он используется только в x264 и x265. libvpx использует -speed
переключатель и дополнительно -quality best
-quality good
или варианты в -quality realtime
, чтобы определить , сколько времени кодера разрешено проводить кодирование кадра. По умолчанию используется -quality good
поскольку -quality best
настолько медленный, что его невозможно использовать, а -quality realtime
предназначен для использования в таких критичных ко времени приложениях, как видеовызовы и прямая трансляция.