a_lot_of_dreams

galakhov


Фреймирование, импликация, идиоматизация, ...

...или почему страшно забыть то, что непросто запомнить...


Previous Entry Share Next Entry
Bash cmd for copying new frames out of existing/previous (non-dropped) ones after recording on SSD.
me
galakhov
Привет всем видеографам!

Взяли вот, к сожалению, не очень быстрый SSD-диск (Intel 320 Series 120GB) для записи с Black Magic Cinema Camera (в формате 2,5K 12-Bit RAW 30fps) и теперь приходится чинить (дополнять или копировать из прошлых или следующих) выкинутые камерой при записи кадры (т.н. dropped frames). Их не так уж много, но вручную искать и копировать/создавать вместо них новые из имеющихся, всё-таки, напряжно. Пришлось искать комманду...

Найденная и дополненная (с копированием из прошлого файла в новый) мной бэш-команда для создания новых кадров вместо несуществующих (выкинутых) при неуспешной записи на медленный или несоответствующий стандартам записи (видео сигнала) SSD диск как раз пригодилась на этот случай:

for nr in $(seq 0 1000); do printf -v fle "NAME OF CURRENT FILE/FOLDER WITH FOUR ZEROS HERE%04i.dng" ${nr}; var=$(( nr - 1 )); printf -v prev "NAME OF PREVIOUS FILE IN A SEQUENCE TO COPY FROM%04i.dng" ${var}; if ! [ -e "${fle}" ]; then echo "${fle}" missing; echo copying file "${prev}" to new one "${fle}"; cp "${prev}" "${fle}"; fi; done

Не забудьте перейти (с помощью команды "cd") в папку со всеми .dng файлами, сохранёнными в секвенции.
Измените также числа в блоке с указанием начального и конечного файла из секвенции: $(seq 0 1000).
Само имя файла (создаваемое камерой) до номера в секвенции соответственно также надо поменять "NAME OF CURRENT FILE/FOLDER WITH FOUR ZEROS HERE%04i.dng" на нужное, плюс имя предыдущего файла, из которого будет создан новый (несуществующий выброшенный фрейм): "NAME OF PREVIOUS FILE IN A SEQUENCE TO COPY FROM%04i.dng" — обычно оно такое же как и "NAME OF CURRENT FILE/FOLDER WITH FOUR ZEROS HERE", так что для них в целях удобства можно создать единую переменную.
Идея отсюда: http://ubuntuforums.org/showthread.php?t=1929436

Те счастливчики, у кого файлы (или их начальная часть) были названы как сама папка, могут попробовать следующую усовершенствованную команду (сначала для простого вывода drop'нутых фреймов):
for nr in $(seq 0 1000); do printf -v fle "%s_%06i.dng" "${PWD##*/}" ${nr}; var=$(( nr - 1 )); printf -v prev "%s_%06i.dng" "${PWD##*/}" ${var}; if ! [ -e "${fle}" ]; then echo "${fle}" missing; echo need to copy file "${prev}" to new one "${fle}"; fi; done

...и эту для создания/восстановления дропнутых фреймой из существующих/предыдущих с помощью комады "cp":
for nr in $(seq 0 1000); do printf -v fle "%s_%06i.dng" "${PWD##*/}" ${nr}; var=$(( nr - 1 )); printf -v prev "%s_%06i.dng" "${PWD##*/}" ${var}; if ! [ -e "${fle}" ]; then echo "${fle}" missing; echo copying file "${prev}" to new one "${fle}"; cp "${prev}" "${fle}"; fi; done


Жирным я выделил места, которые следует заменить.
Имя файла в этой команде составляется из отформатированного имени папки, в которой мы находимся: "%s_..." "${PWD##*/}" и самого номера в секвенции с 6-ю нулями плюс формат файла (.dng): %06i.dng, вычитывается из итератора: ${nr}.

О переменной ввода/вывода актуальной папки "${PWD##*/}" здесь:
http://stackoverflow.com/questions/8078167/bizarre-issue-with-printf-in-bash-script09-and-08-are-invalid-numbers-07

Буду рад дополнениям, опыту с другими SSD дисками или усовершенствованиям ;)

Удачи!

?

Log in