История изменений
Исправление
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}