Как использовать FFmpeg и rav1e для создания высококачественных файлов AV1?

Как использовать FFmpeg и rav1e для создания высококачественных файлов AV1?

В настоящее время я использую Ubuntu Focal Fossa 20.04 LTS и хотел бы создавать высококачественные файлы AV1 с помощью FFmpeg и librav1e. Меня подтолкнулидобавлениеподдержки rav1e для FFmpeg как «librav1e».

Материал, с которым мне интересно работать, представлен здесь:

  1. Видео трейлера Sintel(720p несжатый 1,7 ГБ)
  2. Синтел трейлер аудио(флак 5МБ)

Это ранние дни для поддержки rav1e в FFmpeg с небольшим количеством документации и опубликованных экспериментов. Было бы здорово увидеть, как все это работает в релизе Ubuntu LTS!

решение1

Похоже, что эта цель может быть достигнута за 4относительно легкошаги, позволяющие Ubuntu Focal Fossa 20.04 LTS справиться с кодированием AV1 с помощью FFmpeg и rav1e!

1. Получите последнюю версию Rust...

Focal Fossa и rav1e выигрывают от новой версии Rust, поэтому скачайте новую копию следующим образом:

sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Следуйте настройкам по умолчанию (просто нажмите «Enter»), а затем выполните следующую команду, чтобы настроить текущую оболочку:

source $HOME/.cargo/env

чтобы разрешить мгновенный доступ к новейшему rust и друзьям. Не забывайте время от времени обновлять эту установку (особенно если обновляете rav1e из этого руководства), запустив:

rustup update

2. Установить rav1e

Лучше всего установить как исполняемый файл (команда rav1e --fullhelpзатем покажет параметры, которые можно использовать из FFmpeg с помощью этой -rav1e-paramsопции), так и библиотеки, которые FFmpeg будет использовать для успешной компиляции и создания librav1e.

Сначала исполняемый файл, использующий простой блок кода копирования и вставки:

sudo apt-get install nasm build-essential pkg-config libssl-dev && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/refs/tags/v0.6.3.tar.gz && 
tar xvf v0.6.3.tar.gz && cd rav1e-0.6.3 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e && \
cd $HOME/ffmpeg_sources && rm -rfv rav1e-0.6.3

Далее устанавливаем cargo-cапплет, а также библиотеки и файл pkg-config, необходимые для FFmpeg. Сначала запускаемодноразовыйкоманда для установки cargo-c:

cargo install cargo-c

и затем скомпилировать rav1eсновас использованием установленного cargo-c:

cd $HOME/ffmpeg_sources && tar xvf v0.6.3.tar.gz && \
cd rav1e-0.6.3 && \
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include

Лучше всего тогда удалить rav1eобщие библиотеки, оставивстатические библиотекидля FFmpeg для подхвата (у FFmpeg проблема с общими библиотеками rav1eв этом местев моей системе):

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3. Установите FFmpeg

Теперь иди ксайт FFmpeg tracи установите FFmpeg согласно инструкции, не забыв добавить:

--enable-librav1e

к ./configureструне. И тогда тяжелая работа сделана :)

4. Запустите кодировщик

Затем можно запустить весьма разумное кодирование на тестовых файлах, упомянутых в исходном вопросе:

ffmpeg -i sintel_trailer_2k_720p24.y4m -i sintel_trailer-audio.flac \
       -c:v librav1e -qp 80 -speed 4 \
       -tile-columns 2 -tile-rows 2 \
       -c:a libfdk_aac -b:a 128k \
       sintel_trailer_av1.mp4

Здесь нужно будет манипулировать следующими вещами:

  • -qp 80: Использует режим «квантизатора» для кодирования в диапазоне от 0 до 255. Меньшие значения обеспечивают более высокое качество, значение по умолчанию — 100. 80, похоже, является оптимальной точкой для этого медиаклипа.
  • -speed 4: Выбирает предустановку скорости (0-10) для кодирования, 0 — наилучшее качество, а 10 — самая быстрая. Эта конкретная настройка — хороший компромисс между скоростью и качеством на моей системе (Threadripper 2-го поколения).
  • -tile-columns 2 -tile-rows 2Довольно приличное увеличение скорости может быть достигнуто путем манипуляций с rav1eкодирование на основе плитки. Приведенный здесь пример разделяет кодировкуи декодированиена 4 сегмента и кажется достойным выбором для предлагаемого входного видео, хотя не стесняйтесь экспериментировать..

Это кодирует во много раз быстрее, чем FFmpeg и libaom-av1, и, возможно, обеспечивает гораздо лучшее качество. Несомненно, эта строка кодирования может быть дополнительно улучшена, и я сделаю это, когда rav1e, FFmpeg и кодирование AV1 станут зрелыми...

5. Бесплатный скриншот

Итак, есть необязательный пятый шаг: создание снимка экрана с готовым работающим выходным файлом :)

введите описание изображения здесь

Дополнительные замечания...

  • Документация FFmpeg: Документация по реализации кодирования FFmpeg с помощью rav1e, это также можно увидеть, выполнив поиск на страницах руководства FFmpeg, или man ffmpeg-all. man ffmpeg-codecsПомните, что собственные параметры rav1e можно увидеть rav1e --helpи добавить в любую командную строку FFmpeg, используя -rav1e-paramsпараметр...

Связанный контент