LINUX.ORG.RU

История изменений

Исправление 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, :

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

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

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}