05 декабря, 2015

FFMPEG и Cinelerra-CVE от Einar Rünkaru

В Cinelerra-CVE от Einar Rünkaru начата работа по интеграции новой версии ffmpeg релиза 2.8.х Принята новая модель работы программы c internal ffmpeg. Эта модель планируется (позже) к принятию и в главной ветке Cinelerra-CV.

Итак.
 
 Старая версия internal ffmpeg удалена из дерева исходного кода Cinelerra-CVE от Einar Rünkaru. Новая используемая теперь версия  ffmpeg (internal) не является частью дерева исходного кода (source tree) Cinelerra-CVE и не хранится в Einar/cinelerra.git. The suffix of ffmpeg libraries is changed to cve, headers are installed under cinelerra-cve.
Используемая бранчем
Cinelerra-CVE internal ffmpeg в дереве исходного кода отныне храниться не будет, но будет клонироваться с source.ffmpeg.org.
Клонированная версия не обновляется автоматически.
Текущее поведение Cinelerra-CVE  (речь сейчас о бранче от Einar Rünkaru) таково, что configure производит проверку last commit from ffmpeg branch 2.8 если directory <cinelerra_root>/ffmpeg не существует.
В этом случае (если directory <cinelerra_root>/ffmpeg не существует)  configure клонирует последнюю на текущий момент выпущенную версию 2.8.x РЕЛИЗА 2.8 с source.ffmpeg.org в cinelerra-directory.
Если же таковая директория в каталоге исходного кода имеется, то configure не будет делать каких-либо попыток загрузить что-либо.
Это довольно удобно, поскольку предоставляет пользователю возможность самостоятельно выбирать: обновлять ffmpeg или нет.
                                                               ***

Как будет вести себя Cinelerra-CVE, если source.ffmpeg.org выпустит релиз новой stable version ffmpeg (например 2.9-stable) ?
Будет ли программа автоматически загружать в ходе компиляции новую версию ffmpeg 2.9-stable или Cinelerra-CVE будет работать со старой версией 2.8 ?


Вероятно существуют изменения API между 2.8 и 2.9. Cinelerra-CVE может перейти к использованию версии 2.9, если в её git произведены и протестированы (если таковые имеются) необходимые для этого изменения. Ни configure, ни дальнейшая компиляция не обновляют автоматически версию FFmpeg. Пользователь может удалить каталог FFmpeg из каталога исходного кода Cinelerra-CVE - в этом случае текущая версия FFmpeg 2.8.x будет клонирована при конфигурировании.
                                                                ***


Предположим, что компания source.ffmpeg.org выпустила новый стабильный релиз ffmpeg - 2.9-stable.
В это время пользователь идёт и удаляет каталог исходных кодов /home/user/builds/cin-cve а затем производит `git clone` или удаляет только каталог ffmpeg (/home/user/builds/cin-cve/ffmpeg) из каталога исходного кода cinelerra-cve

 В этом случае будет клонирована текущая версия ffmpeg. Но какая:  2.8.x-stable или 2.9-stable ?

Если это происходит после того, как в einar/cinelerra.git произведены необходимые изменения для перехода на новую версию, и пользователь выполняет `git pull`,   configure клонирует 2.9.x
Если в Einar/cinelerra.git  необходимые изменения для перехода на новую версию не производились, configure клонирует 2.8.x
                                                                   ***


Предположим, что компания source.ffmpeg.org выпустила новую стабильную версию ffmpeg - 2.9-stable.
В это время в einar/cinelerra.git произведены необходимые изменения для перехода на новую версию. 
У пользователя в каталоге /home/user/builds/cin-cve/ffmpeg находится 2.8.x
Пользователь, не удаляя каталог /home/user/builds/cin-cve/ffmpeg ,  выполняет git clone ..   ./autogen   ./configure

 

В этом случае новая 2.9-stable клонирована не будет.
configure клонирует 2.8.x и компиляция программы произойдёт   с 2.8.x
----------------------------------------------------------------------------------


Если Вы конфигурируете с external ffmpeg, ничего не загружается.
В настоящий момент компиляция с external ffmpeg не поддерживается, хотя опция и существует.
По завершении работы над интеграций 2.8 планируется поддержка и компиляции с external ffmpeg
Версии FFmpeg, которые не поддерживаются программой внутри, не будут поддерживаться и извне.

Опытный пользователь  имеет возможность самостоятельно провести upgrade ffmpeg, если считает это необходимым. Пользователь может загрузить любую версию ffmpeg и поместить её в <cinelerra_root>/ffmpeg. Это не приведёт к конфликтам с configure.   

<cinelerra_root>/.configure должно быть запущено после изменений FFmpeg, так как команда configure производит конфигурирование (настройку) internal FFmpeg. То есть исходный код ffmpeg должен быть размещен в cinelerra директории прежде, чем будет выполнено configure.

Пользователь должен знать, что компиляция cinelerra-cve с таким custom (пользовательским) ffmpeg может потерпеть неудачу, ибо изменения api происходят относительно часто.

На настоящий момент cinelerra-cv использует ffmpeg libs для mp4, h264 codecs, WMA decoding и AC3 encoding. Другой вопрос как это работает .. 


Проблемы с h264.mp4, с AAC  вызваны тем, что:
".. the current quicktime is incompatible with the latest libx264. Seems that initialization is not right. Fixing libquicktime means complete rewrite of it. .."


"..   Which AAC-encoder is used by CVE ?
External libfaac.  libfaac is used through quicktime what has its own quirks."


Поэтому принято решение избавиться от libquicktime и передать все её функции ffmpeg


Личный испытательный полигон Einar Rünkaru ".. does not use libquicktime for rendering `QuickTime for Linux` from december 2015 .. I did replacing funtionality of quicktime with other means.." 
 
По поводу возможности использования FDK_AAC (libfdk-aac)
" ..As ffmpeg supports this, it is possible that it will be supported automatically when ffmpeg is linked to suitable library .. "


"..Though Cinelerra is linked with system libjpeg it heavily depended on quicktime - this was the reason of crash on certain jpegs.."

Все эти изменения будут портированы в main.git Конечной целью проекта заявлен полный переход программы на работу с сиcтемным (внешним) ffmpeg. Поскольку некоторые дистрибутивы не имеют ffmpeg, использование internal ffmpeg будет оставлено в качестве опции.

.. I was just wondering what the strategy will be for the new ffmpeg:
1. "Branch and embed", similarly to the current situation: Take version from upstream and embed into cinelerra-cv's main code ?
2. Link to system-based ffmpeg ?

Final destination is:
a) Link system-based ffmpeg.
b) Optionally configure can clone ffmpeg from ffmpeg.org
  

git clone https://github.com/vanakala/cinelerra-cve.git
git pull
./autogen.sh
./configure --prefix=/opt/cv_einar --enable-nonfree --with-buildinfo=git/recompile
make
make install

UPDATE:

  Mon, 9 Apr 2018 Cinelerra-CVE:
Make configure parameter --with-external-ffmpeg work again.
Should work with avlibs of ffmpeg version 2.8 and above
Needs libavformat{internal,os_support}.h headers, what normally are not installed.

  UPD. Jan. 2020
External ffmpeg does not work. I discovered that media file handling in Cinelerra conflicts sometimes with ffmpeg. It is rare, but conflict exists. So I am rewriting the rendering part of Cinelerra to get rid of the conflict. The list of enabled formats (containers) is in formattools.C.

UPD.-2019
На настоящий момент проект Cinelerra-CV официально числится как замороженный (c 25.05.2022 г. в РФ, РБ сайт по ссылке доступен только через VPN/proxy). Его главный разработчик Einar Rünkaru продолжает свою работу над Cinelerra-CVE https://github.com/vanakala/cinelerra-cve
Cinelerra-CVE - это форк Cinelerra-CV. Краткое описание смотрите в этом блоге здесь. Узнать больше о Cinelerra-CVE можно, посетив новый официальный сайт Cinelerra-CV http://cinelerra-cv.wikidot.com/ (c 25.05.2022 г. в РФ, РБ сайт доступен только через VPN/proxy)


Комментариев нет:

Отправить комментарий