В настоящее время я использую Ubuntu Focal Fossa 20.04 LTS и хотел бы создавать высококачественные файлы AV1 с помощью FFmpeg и librav1e. Меня подтолкнулидобавлениеподдержки rav1e для FFmpeg как «librav1e».
Материал, с которым мне интересно работать, представлен здесь:
- Видео трейлера Sintel(720p несжатый 1,7 ГБ)
- Синтел трейлер аудио(флак 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
параметр...