13 декабря, 2024

Секвенции | Sequences in Cinelerra

 В этой заметкe речь пойдёт о секвенциях в Cinelerra. Говорили о них и показывали как работать с анимацией в Cinelerra немало; ничего там сложного нет, но встречаются мелкие ошибки, становящиеся иногда для пользователей чуть ли не камнем преткновения.

В каталоге с изображениями запускаем
$ find '/home/user/xxx' -iname "*.jpg" | sort

Получаем список формата

/home/user/xxx/0.jpg
/home/user/xxx/1.jpg
/home/user/xxx/2.jpg
/home/user/xxx/3.jpg
/home/user/xxx/4.jpg
/home/user/xxx/5.jpg

Далее создаём файл, например, anim.list

JPEGLIST
# First line is always JPEGLIST
# Frame rate:
10.00
# Width:
720
#Height
576
# List of image files follows
/home/user/xxx/1.jpg
/home/user/xxx/2.jpg
/home/user/xxx/3.jpg
/home/user/xxx/4.jpg
/home/user/xxx/5.jpg

Можно и так (для png всё аналогично):

JPEGLIST
10.00
720
576
/home/user/xxx/1.jpg
/home/user/xxx/2.jpg
/home/user/xxx/3.jpg
/home/user/xxx/4.jpg
/home/user/xxx/5.jpg

Но если в 1-й строке вместо JPEGLIST будет JPGLIST, то файл/секвенция в программу не загрузится.

Cin-GG покажет окно с сообщением
virtual int FileJPEG::read_frame_header(char*):
FileJPEG::read_frame_header /home/user/xxx/anim.list bad header
или окно с сообщением, что формат не распознан.

Cin-HV/CV/E скажет, что формат не распознан или покажет окно



Для файла с секвенцией изображений используйте расширение .list -- это правильное расширение.
Cin-HV, Cin-CV, Cin-CVE понимают расширения .list, .txt.
Cin-GG понимает расширение .list. В некоторых учебниках для CV для списка секвенции изобр. рекомендуют создавать файл с расширением .txt, но Cin-GG этот формат не распознаёт.
В какой-то инструкции по созданию  анимации в cinelerra, встречалось даже .sh.
Все разновидности Cinelerra его распознают и загружают, но так делать не надо. Такое расширение обычно имеют файлы, содержащие код для различных видов скриптов, которые могут быть использованы оболочкой Bash от Unix.

А теперь, cобственно, по какому поводу ораторствую.
На форуме cin-gg была создана тема, в которой пользователи пытались выяснить что это такое и почему выскакивает.
На английском это будет:
int FileList::read_list_header():
/home/user/xxx/anim.list:
1 files not found
virtual int FileList::read_frame(VFrame*):
Error while opening "" for reading. 
No such file or directory

В поисках ответа на эту очередную разновидность извечного вопроса мироздания "Кто виноват и что делать ?" пользователи сражались как львы. Но упрямое сообщение оказалось сильнее и только ухмылялось во весь размер окна, заботливо дубася пользователей по голове в ответ на попытки с ним справиться. Загадку оставили до лучших времён.

Так вот, эти лучшие времена настанут прямо здесь и сейчас.
Воспроизведём ошибку:


Разгадка.
Ошибка появляется в том случае, если в файле anim.list имеется лишняя строка. В рассматриваемом примере, это 13-я строка (на скриншоте слева). Удалите её (на скриншоте справа) и вы избавитесь от назойливого сообщения.


P.S.
Скопирую сюда свой ответ в этой теме.
Пользователь спрашивал как из 6000 фото сделать таймлапс c частотой 40 кадров/сек

Делим 6000/40 = 150 секунд
150 секунд -- это общая продолжительность таймлапса на дорожке.

Далее 150/6000 = 0.025 -- это длительность одного изображения.
Число 0.025 следует поставить в поле "Import images with a duration ... sec"  | (Длительность изображений)
Таким образом, каждое импортированное в программу изображение будет иметь длительность 0.025 сек

Параметр имеется в Cin-CV/CVE, Cin-GG. Был удалён из Cin-HV.
В Cin-GG  находится в Settings->Preferences>Interface->Operation->'Import images with a duration ... sec'

Число 40 ставим в Settings->Format->'Frame rate'.

Можно ещё проще 1/40 = 0.025

06 декабря, 2024

Cinelerra CV: libavutil-cv.so.49: cannot open shared object file

Неожиданно перестала запускаться Cinelerra CV.
В терминале:
:~$ /opt/cin-cv/bin/cinelerracv
/opt/cin-cv/bin/cinelerracv: error while loading shared libraries: libavutil-cv.so.49: cannot open shared object file: No such file or directory
:~$
Пересборка не помогла (я собираю, как правило, в ./configure --prefix=/opt/cin-cv).
:~$ sudo ldconfig
тоже бестолку.

Решение:
- в каталоге /etc/ld.so.conf.d создать файл с произвольным названием, например, cinelerra-cv.conf
~$ sudo geany /etc/ld.so.conf.d/cinelerra-cv.conf
- прописать там строку согласно целевому каталогу, в моём случае /opt/cin-cv/lib
- сохранить файл
- $ sudo ldconfig

Причина в том, что cinelerra-cv в процессе установки выполняет ldconfig -n <newlibrarydirectory> сразу после установки libquicktimecv. Однако после установки libavutil-cv это не выполняется.

Команда ldconfig вызывает одноименную утилиту, осуществляющую формирование кэша информации о новейших версиях разделяемых библиотек и создание символьных ссылок на них для последующей корректной работы динамического линковщика ld.so  . Утилита использует файл конфигурации /etc/ld.so.conf для чтения списка нестандартных директорий с разделяемыми библиотеками (стандартными являются /usr/lib и /lib), а также получения дополнительной информации о некоторых библиотеках.

Поскольку мы не знаем когда ldconfig надумает снова удалить unconfigured libraries из базы данных, 
всякий раз после перекомпиляции cinelerra-cv с новым целевым каталогом, имеет смысл размещать новый путь /opt/NEW_DIR/lib в файле cinelerra-cv.conf.

Впрочем, на моей памяти такой сбой случался за 10 лет так редко, что я напрочь забыл об этом. Потому может быть достаточно однократной процедуры.

Благодарю разработчика Cinelerra-CVE Einar Rünkaru за помощь !