Сборка MELT из исходных кодов (сборка окружения для тестирования git-версии Kdenlive)


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat)
cuda ffmpeg git kdenlive nasm video web видео
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 3 недели, 5 дней)

В прошлых заметках я уже рассказывал как собрать ffmpeg с поддержкой аппаратного кодирования и декодирования видео-файлов. Сборка ffmpeg с поддержкой CUDA ускорило обработку видео-файлов в четыре раза по сравнению с обработкой на CPU. Следующим этапом я решил применить все имеющиеся наработки для подключения этого функционала в Kdenlive, что теоретически должно ускорить обработку моих видео-заметок.

Тестовая сборка kdenlive из GIT-репозитория

Для сборки тестовых (GIT) версий Kdenlive и всех сопутствующих проектов создан специальный Build-скрипт который вы можете найти в официальном репозитории проекта MLT.

https://github.com/mltframework/mlt-scripts/blob/master/build/build-kdenlive.sh

Скрипт для автоматической сборки kdenlive из исходных кодов

При помощи этого скрипта вы можете провести сборку текущей GIT-версии (master), вам потребуется лишь запустить скрипт с единственным параметром который указывает в какой каталог проводить сборку приложения:

# ./build-kdenlive.sh /usr/local/kdenlive/

Скрипт работает замечательно, но он не устанавливает необходимые для сборки приложения dev-файлы и библиотеки и вам придется выполнить эти манипуляции самостоятельно:

# aptitude install libavdevice-dev libmovit-dev fftw-dev libsamplerate-dev libsox-dev libqt5svg5-dev \
  apt-get install build-essential pkg-config \
  libavformat-dev libavdevice-dev frei0r-plugins-dev  frei0r-plugins libgtk2.0-dev libexif-dev \
  libsdl2-dev libsox-dev libxml2-dev \
  ladspa-sdk libcairo2-dev libswscale-dev qtscript5-dev libqt5svg5-dev \
  libqt5opengl5-dev libepoxy-dev libeigen3-dev libfftw3-dev \
  git  yasm libtool automake   autoconf  libtool-bin  libtheora-bin  libtheora-dev \
  intltool swig libmp3lame-dev libgavl-dev libsamplerate0-dev   libjack-dev  libsoup2.4-dev   \
  python-dev  libkf5crash-dev  libkf5filemetadata-dev
# apt-get install libkf5archive-dev libkf5bookmarks-dev libkf5coreaddons-dev \
  libkf5configwidgets-dev libkf5dbusaddons-dev libkf5kio-dev libkf5widgetsaddons-dev \
  libkf5notifyconfig-dev libkf5newstuff-dev libkf5xmlgui-dev libkf5declarative-dev \
  libkf5notifications-dev libkf5guiaddons-dev libkf5textwidgets-dev libkf5iconthemes-dev \
  kdoctools-dev libkf5crash-dev libkf5filemetadata-dev extra-cmake-modules \
  libsm-dev cmake qtdeclarative5-dev kde-runtime kinit  kio \
  qml-module-qtquick-controls xutils-dev

Так же, сборка последних версий kdenlive потребует nasm с минимальной версией 2.13, в противном случае вы получите ошибку: Minimum version is nasm-2.13. Сборка nasm не составляет особой трудности:

# wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2
# tar -xvf ./nasm-2.13.03.tar.bz2
# cd ./nasm-2.13.03
# ./configure
# make && make install

После установки необходимых компонентов сборка пройдет успешно и вы можете провести запуск приложения из каталога /usr/local/kdenlive/20180421/bin/.

Свежесобранная версия kdenlive

Обязательно перейдите в настройки окружения и отредактируйте параметры окружения MLT (Настройка -> Настроить Kdenlive ...)

Окружение MLT

Как вы понимаете, простая сборка из исходных кодов меня слабо интересовала, а мне интересно настроить Kdenlive на использование аппаратного ускорения. Первым делом естественно необходимо провести так называемы базовый замер на эталонном видео-проекте. Я буду собирать небольшой видео-обзор по лучшим играм для Super Nintendo и постараюсь задействовать максимум видео-эффектов и переходов, точнее я буду собирать лишь интро от этого видео-обзора ведь меня все равно интересует только время пересборки с разными параметрами.

Интро-заставка для TOP-10 игр для Super Nintendo

Первая сборка видео-файла заняла: 18 минут 23 секунды

Сборка проводилась при помощи MLT и FFMPEG (основные компоненты Kdenlive) без оптимизаций по использованию аппаратного ускорения, исключительно на процессоре.

Оптимизация времени сборки проектов Kdenlive (используем аппаратное ускорение обработки графики)

Использование оптимизированной для использования аппаратного сжатия версии FFMPEG

Начнем с внедрения в скрипт сборки наработок из прошлого проекта "Сборка пакета FFmpeg из исходных кодов (с поддержкой CUDA)" и первым делом добавим дополнительные параметры к скрипту сборки:

FFMPEG_ADDITIONAL_OPTIONS="--enable-nonfree --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls \
 --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfribidi \
--enable-libgme --enable-libgsm --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus \
--enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh \
 --enable-libtwolame --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 \
--enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm \
--enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libfreetype  --enable-shared --enable-libfontconfig \
--enable-libfreetype --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 "

После сборки проекта проверьте со всеми ли требуемыми параметрами мы собрали ffmpeg.

ffmpeg собранный с поддержкой CUDA

При сборке вы можете получить получить ошибку:

ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec

Для исправление ошибки установите соответствующие заголовочные файлы:

# git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
# make && make instal

Простой сборки ffmpeg недостаточно и вам потребуется дополнительно создать дополнительный профиль обработки для использования кодека h264_nvenc:

properties=x264-medium f=mp4 vcodec=h264_nvenc acodec=aac g=120 crf=%quality ab=%audiobitrate+'k'

Скажу сразу, что это ускорило обработку видео-файла на 30 секунд, что на уровне погрешности.

Аппаратное ускорение при декодировании

Теоретически, при перекодировании видео-файлов можно выиграть и больше времени, но в моем проекте видео-фрагменты практически не использовались.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .