LINUX.ORG.RU

Функция от current frame number

 


1

1

Всех приветствую. Ребята, допустим хочу - есть картинка и видос на руках, хочу плавно перемещать картинку по экрану по мере воспроизведения фонового ролика. Т.е. есть ли какая-то нода в композиторе вроде Transform, где можно указать x=FramePtr*val?

★★

Нашёл сам. Нужно брать «Value» ноду, в поле со значение для ссылки на frame pointer нужно писать «#frame». Также там можно всякие выражения «(#frame - 3) * 2»

kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от xDShot

Если я правильно понимаю, то это про 3д модели. У меня же простой композитинг готового видео. В общем в моём случае мне вполне достаточно функции от фрейм поинтер ибо движение равномерное и прямолинейное.

kvpfs ★★
() автор топика
Ответ на: комментарий от kvpfs

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

xDShot ★★★★★
()
Ответ на: комментарий от xDShot

ок, буду иметь в виду, может пригодится когда-нибудь, спасибо. Правда при беглом взгляде не въехал как это заюзать, подумалось, что надо что-то вроде «добавить плоскость на 3д сцену, на неё спроецировать видос, и на этом фоне что-то двигать».

kvpfs ★★
() автор топика

Хочется оставить здесь (на память) два шел скрипта - первый удаляет дыры в последовательности png кадров и печатает начальные кадры непрерывных (в прошлом) диапазонов. Второй - копирует COUNT раз последовательность [SRCSTART_FRAME:SRCEND_FRAME) и вставляет её на место DEST_FRAME кадра со сдвигом хвоста. Т.к. пишу уже второй раз, после первого всё благополучно утерял. А с этим постом не потребуется вновь писать при следущеме творческом приступе.

Зачем мне этот костыль? Когда-то юзал kdenlive для подобного, но современный говнософт на QT отказывается корректно работать на одном из моих компов. Видимо в современной гуйне очень много rocket science, и без суперкомпьютера никак. Хотя вроде и блендер что-то из этого умеет, но мне обычный проигрыватель, ffmpeg и эти костыли удобнее.

#!/bin/bash

temp_dir="1234567_temp_dir"

counter=1
last=-1

mkdir ${temp_dir}
for cur in $(ls *.png | sort -n); do
	filename="${cur##*/}"
	num=$(echo "${filename%.*}" | sed 's/^0*//')
	if (( ${num} - ${last} != 1 )); then
		echo "range start = ${counter}"
	fi
	cp -i ${cur} ${temp_dir}/$(printf %04d.png ${counter})
	last=${num}
	(( ++counter ))
done

rm *.png
mv ${temp_dir}/* .
rmdir ${temp_dir}
#!/bin/bash

if (( $# != 4 ))  ||  (( $3 == 0 )); then
	echo "invalid arguments"
	echo "usage:pngclone SRCSTART_FRAME SRCEND_FRAME COUNT DEST_FRAME"
	exit 1
fi

temp_dir="1234567_temp_dir"
src_cnt=$(( $2 - $1 ))
dest_cnt=$(( ${src_cnt} * $3 ))

mkdir ${temp_dir}
for (( frame_pos=$1;  frame_pos != $2;  ++frame_pos )); do
	cp -i $(printf %04d.png ${frame_pos}) ${temp_dir}/$(printf %04d.png ${frame_pos})
done

for cur in $(ls *.png | sort -nr); do
	filename="${cur##*/}"
	num=$(echo "${filename%.*}" | sed 's/^0*//')
	if (( ${num} >= $4 )); then
		mv -i ${cur} $(printf %04d.png $((num+${dest_cnt})))
	fi
done

dst_num=$4
for (( cnt_pos=0;  cnt_pos != $3;  ++cnt_pos )); do
	for (( frame_pos=$1;  frame_pos != $2;  ++frame_pos )); do
		cp -i ${temp_dir}/$(printf %04d.png ${frame_pos}) $(printf %04d.png ${dst_num})
		(( ++ dst_num ))
	done
done

rm -r ${temp_dir}
kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 1)