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

Вопрос или проблема

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

Вот материал, с которым я хочу работать:

  1. Трейлер к фильму Sintel (720p несжатый 1.7GB)
  2. Аудио трейлера Sintel (flac 5MB)

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

Похоже, эта задача может быть выполнена в 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

Теперь перейдите на сайт trac FFmpeg и установите 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 — наибольшая скорость. Этот параметр является хорошим компромиссом между скоростью и качеством на моей системе (2-е поколение Threadripper).
  • -tile-columns 2 -tile-rows 2 Довольно неплохие ускорения по скорости можно получить, манипулируя кодированием с использованием тайлов в rav1e. Пример, представленный здесь, разделяет кодирование и декодирование на 4 сегмента и, кажется, является удачным выбором для предложенного входного видео, хотя не стесняйтесь поэкспериментировать..

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

5. Бонусный скриншот

ОК, есть опциональный пятый шаг; сделать скриншот завершенного выходного файла 🙂

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

Дополнительные заметки…

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

.

Ответ или решение

Как использовать FFmpeg и rav1e для создания высококачественных файлов AV1 на Ubuntu 20.04 LTS (Focal Fossa)

Создание видео высокого качества – задача не из лёгких, особенно когда речь идет о новейших технологиях кодирования, таких как AV1. В Ubuntu 20.04 LTS, используя FFmpeg и библиотеку librav1e, мы можем достичь выдающегося качества видео. Следуя инструкциям ниже, вы сможете эффективно настроить и использовать эти инструменты.

1. Установка актуальной версии Rust

Для работы с rav1e требуется обновлённая версия Rust. Установите её следующим образом:

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

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

source $HOME/.cargo/env

Для обновления Rust со временем используйте команду:

rustup update

2. Установка rav1e

Установка Исполняемого Файла

Сначала установите необходимые инструменты:

sudo apt-get install nasm build-essential pkg-config libssl-dev

Создайте рабочие директории и скачайте исходники rav1e:

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

Соберите rav1e:

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, чтобы компилировать rav1e с нужными библиотеками:

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

Удалите общие библиотеки, чтобы оставить только статические:

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

3. Установка FFmpeg

Обратитесь к документации по установке FFmpeg и добавьте флаг:

--enable-librav1e

к строке ./configure, чтобы включить поддержку librav1e.

4. Запуск кодирования

Теперь вы готовы создавать свой первый AV1 файл. Используйте следующую команду для кодирования предоставленных файлов:

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, где более низкие значения означают лучшее качество.
  • -speed 4: Увеличение этой цифры ускоряет процесс кодирования за счет качества.
  • -tile-columns 2 -tile-rows 2: Разделите видео на несколько сегментов для повышения скорости.

5. Дополнительные заметки

Пожалуйста, ознакомьтесь с документацией FFmpeg по librav1e для изучения дополнительных параметров кодирования, которые могут подойти под ваши задачи.

Создание высококачественных файлов AV1 с использованием FFmpeg и rav1e на Ubuntu 20.04 может быть увлекательным процессом. Экспериментируйте с параметрами для достижения наилучших результатов.

Оцените материал
Добавить комментарий

Капча загружается...