Скриптовой файл представляет собой текстовый файл, содержащий набор команд управления камерой и процессом съемки в целом.
Файл начинается со строки, содержащей следующую последовательность (обязательно с начала строки):
#!dslrobot
Эта строка является признаком, что данный файл является скриптом DSLRobot. Файлы без такого маркера не обрабатываются.
Дальше начинается построчная обработка файла. Каждая строка содержит одну команду. Строки, начинающиеся с символа # или последовательности // считаются комментариями и не обрабатываются.
# Это комментарий
// И это тоже
Также пропускаются конструкции, которое DSLRobot не смог разобрать. Файл читается до конца неверной команды и дальнейшее выполнение продолжается.
Команды всего две:
set параметр="значение" ...
shot [параметр="значение" ...]
И еще одна команда предусмотрена для тех, кто хочет управлять настройками камеры по USB/IEEE 1384, а затвором — с помощью COM-порта:
shotcom параметр="значение" ...
Команда set выполняет установку одного или нескольких параметров камеры. Информация о параметрах передается в виде пар название параметра=значение. Значение обычно передается в кавычках, но в очевидных случаях кавычки можно опустить.
Устанавливаемые параметры разделяются пробелами. В качестве разделителя также можно также использовать запятые.
set Tv="1/10" Av=4.5, ISO="100"
Команда shot выполняет установку заданных параметров камеры, а затем производит съемку очередного кадра. Если параметры не заданы — съемка делается с текущими настройками. В этом смысле эти две последовательности команд эквивалентны:
set Tv="1/10"
shot
shot Tv="1/10"
Команда shotcom делает то же самое, что и shot, но подает команду не через Canon API, а сигналом RTS выбранного COM-порта. Команда доступна только если DSLRobot был запущен с ключем -com. Управление через COM-порт является экспериментальным. Подробнее про эту возможность см. здесь.
Теперь самое интересное — настраиваемые значения и их коды. Но чтобы не отвлекаться потом, хочу сделать одно замечание. Настройка камеры имеет массу особенностей. Я постарался их выписать тут. Настоятельно рекомендую ознакомиться.
В скобочках перечислены альтернативные написания.
В комментариях не нуждается, или почти не нуждается. Буква n означает "нормальное" (normal) качество JPEG, а без нее — "прекрасное" (fine). JPEG "прекрасного" качества больше по размеру, в нем больше деталей, но обрабатывается и сохраняется дольше и т.д.
Время задержки оценивается примерно по такой формуле:
Время съемки = Tv * ShotMul + ShotTime.
ShotTime задается в миллисекундах, ShotMul — число с плавающей точкой.
Значения параметров подбираются опытным путем. Подробнее о причине вводить такие странные параметры и их подборе см. здесь.
Все доступные мне камеры плохо относятся к его переполнению. А вот API не дает данных о том, сколько есть и сколько осталось (а ведь на экране камеры — это число есть!). Вот и пришлось ввести такую настройку.
Второй параметр показывает, сколько времени (в миллисекундах) нужно ждать (по максимуму), если буфер заполнен. Все (опять же доступные мне) камеры за 5 секунд справляются с записью по крайней мере одного изображения. Соответственно по умолчанию выставлено BufTime=5000. Если у Вас все хуже — можно увеличить. А вот уменьшать — не рекомендую.
Для тех, кто не сообразил еще где взять BufSize см. здесь.
Понятно, что в процессе съемки потребуются паузы. Во-первых, периодически придется делать паузы, чтобы камера успевала сбросить снятые кадры на карточку. Во-вторых, иногда хочется подождать того самого момента "Ч", про который что-то известно. Для такой вот синхронизации используется команда wait:
wait параметр="значение"
Параметров бываем довольно много:
Интервал можно задавать в одном из следующих форматов: SS.SSS (число секунд), MM:SS, HH:MM:SS. Пример:
wait sleep="1:10.5"
wait sleep="70.5"
Здесь последовательность действий такая. Сначала Вы устанавливаете контрольную точку с помощью команды checkpoint. Затем в скрипте команда wait checkpoint=... приостанавливает выполнение скрипта, пока не пройдет заданное количество времени с момента установки контрольной точки. Значение интервала задается так же, как и для параметра sleep. Пример:
checkpoint
// Какие-то операции...
...
wait checkpoint="1:10.5"
Время может задаваться либо датой и временем, либо одним временем (подразумевается время текущего дня). Если заданы и дата, и время, то их нужно разделять пробелами. Допустимые форматы дат: MM-DD, YYYY-MM-DD, DD.MM, DD.MM.YYYY. Формат времени: HH:MM, HH:MM:SS. Пример:
wait time="21:15:20"
wait gmt="2008-07-28 14:10:00"
Если так получилось, что заданная временная метка уже прошла, команда просто продолжает работу без пауз.
wait user="Готов к началу съемки! \n Начинаем?"
Чтобы сообщить пользователю какую-то информацию, можно использовать команды:
echo "текст сообщения"
play "имя звукового файла"
Команда echo просто выводит строку текста на экран.
Команда play пытается проиграть указанный звуковой файл. Звук играется асинхронно, т.е. не тормозит выполнение съемки.
По логике должны играться любые звуковые файлы, для которых в системе установлен кодек. Однако мне удалось проиграть только WAV-файлы в формате PCM. Почему так, я разбираться не стал, ибо для звукового сообщения и этого достаточно.
#!dslrobot # Comment checkpoint echo !--------------------------! echo Это такая минитабличка | echo !--------------------------! play D:\tada.wav #wait sleep="00:01:10" #wait time="1:30" #wait gmt="21:30:10.1" #wait time="08-05" #wait gmt="25.11" #wait time="08-10-5" #wait gmt="25.7.2008" #wait time="22.07.2008 2:01:01" wait checkpoint="90" set Tv=1/30 Av="4" set format="RAW", AEMode="Tv" set ISO=200; metering="eval"; set drive="single" set shotmul=2.5 //set shottime=1 shotmul=2.2 checkpoint shot Tv=1000 shot Tv=500 shot Tv=250 shot Tv=125 shot Tv=60 wait checkpoint="10" shot Tv=30 shot Tv=15 shot Tv=8 shot Tv=4 shot Tv=2 wait checkpoint="20" shot Tv=1 shot Tv=2s shot Tv=1 wait checkpoint="30" shot Tv=2 shot Tv=4 shot Tv=8 shot Tv=15 shot Tv=30 wait checkpoint="40" shot Tv=60 shot Tv=125 shot Tv=250 shot Tv=500 shot Tv=1000 wait user=Finish
Copyright © 2008, Дмитрий Пашко <>.