..FlyCap2 will truncate the data to 8 bit when saving as AVI, so you are correct. This counts for each camera.
Практический итог нашей бурной дискуссии про родную программу для камер от Point Grey: сохранение кадров в AVI делается в режиме 8 бит на пиксель, т.е. 256 градаций яркости.
Ситуация такая. Камера 16-ти разрядная. Известно, что данная камера и FlyCap2 умеют писать на компьютер серии отдельных кадров в 12/16 бит. Встала задача преобразовать серию снимков 16 бит .pgm в видео-ролик 16 бит .avi и скормить его Autostakkert'у и WinJupos.
Есть такая жутко мощная штука, как ffmpg. Это набор С++ библиотек для работы c видео, фото, звуком. На ее базе построены многие известные ЛА приложения. Наткнулся на статью
http://habrahabr.ru/post/171213/ с описанием некоторых ее функций и попытался поработать с ней напрямую.
Если у вас стоит Windows, то скачиваем ffmpeg отсюда
http://ffmpeg.zeranoe.com/builds/ и распаковываем.
Например, сюда D:\Distrib\ffmpeg-20131118-git-260fc0d-win32-static. Дальше запускаем D:\Distrib\ffmpeg-20131118-git-260fc0d-win32-static\bin\ffmpeg.exe. После чего ffmpeg стартует в фоновом режиме.
Затем в обработчике команд (cmd) набираем команду
ffmpeg -f image2 -i YourPhotoFile_%04d.pgm YourVideoFile.mpg
После этого в cmd с помощью команд "d:"(у вас может быть другой диск) и "cd имя_папки" последовательно добираемся до папки, где лежат снимки с камеры. У меня, например, в папке оказался такой список снимков Юпитера, снятых в IR канале:
fc2_SAVE_ir_2013-11-18-072200-0000
.....
fc2_SAVE_ir_2013-11-18-072200-0407, т.е. в папке лежат 408 снимков в ч/б, 16 bit.
В обработчике команд (cmd) набираем команду:
ffmpeg -f image2 -i PhotoFile_%04d.pgm VideoFile.mpg
, где вместо PhotoFile и VideoFile надо подставить реальные имена фото и желаемое имя для видео файлов. Команда склеивает все файлы с расширением .pgm, вида PhotoFile_0001.pgm ... PhotoFile_9999.pgm, находящиеся в выбранной папке в один видео файл с именем VideoFile.mpg. Шаблон %04d указывает, что порядковый номер файла четырехзначный. Можно использовать любой формат изображений - tiff, jpeg, png и т.д. В моем случае использовался .pgm.
Если файлы такого вида: PhotoFile1.jpg...PhotoFileN.jpg, то команда будет такая:
ffmpeg -f image2 -i PhotoFile%d.jpg VideoFile.mpg
Используемые мной команды:
ffmpeg -f image2 -i fc2_SAVE_ir_2013-11-18-072200-%04d.pgm VideoFile.mpg
Еще одна команда. Тут 30 задает желаемый fps.
ffmpeg -r 30 -y -i "fc2_SAVE_ir_2013-11-18-072200-%04d.pgm" VideoFile.mpg
С этой командой получили 25 fps, хотя хотели 30. Если у вас несколько роликов, собрать их в один также можно командой ffmpg. Если ролики в одинаковых форматах с одинаковыми параметрами:
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
Еще один формат команды, дающий такие же результаты:
ffmpeg -r 30 -i "fc2_SAVE_ir_2013-11-18-072200-%04d.pgm" -y -r 30 "VideoFile.mpg" , где 30 - желаемый fps
Попутно, нашел утилиту Images to Video
http://www.softpedia.com/progDownload/Images-to-Video-Download-113495.html , которая является оберткой для ffmpeg. Программа имеет простой человеческий интерфейс и без каких-либо затыков собрала за пару минут полноценный ролик .wmv из всех кадров, находящихся в исходной папке. Дальше отправляем полученный файл на переплавку, т.е. конвертируем в .avi формат. Дальше обрабатываем, как обычно.
Однако, все описанные выше варианты работали с 8 бит и с компрессией. Задача же заключалась в том, чтобы 16-битные .pgm засунуть в 16 же битный видеоролик и желательно без потери качества (lossless).
Дальнейшие поиски привели к дискуссии
http://forums.creativecow.net/thread/291/351 в интернете. Опыты с предложенными там решениями выдали уже более вменяемые результаты, с использованием кодека ffv1. Например, мной применялись такие команды:
ffmpeg -f image2 -pix_fmt gray -i fc2_SAVE_ir_2013-11-18-072200-%04d.pgm -an -vcodec ffv1 movie.mov (выдал 16 бит .mov) , .mov это хорошо, но мало. Идем дальше.
ffmpeg -f image2 -pix_fmt gray -i fc2_SAVE_ir_2013-11-18-072200-%04d.pgm -an -vcodec ffv1 movie.mkv (выдал 16 бит .avi) , это тоже хорошо, идем еще дальше.
ffmpeg -f image2 -pix_fmt gray -i fc2_SAVE_ir_2013-11-18-072200-%04d.pgm -an -vcodec ffv1 movie.avi (выдал 16 бит .avi)
Отработали команды вполне неплохо, выдав ролики в 16 бит.
http://img-fotki.yandex.ru/get/9511/7035564.6/0_13111b_110d23ac_origОднако, чтобы их воспроизвести, пришлось установить декомпрессор XMedia Recode
http://www.xmedia-recode.de/download.html для кодека ffv1. Эта программа, кроме того, является замечательным и серьезным универсальным конвертором.
http://img-fotki.yandex.ru/get/9327/7035564.6/0_13114e_1f5a23d2_origНа данном этапе нам нужно открыть ролики в VirtualDub. Для этого воспользуемся кодеком huffYUV, color mode выберем Planar 16bpp. Добавим job и выполним конверсию. После этого с радостью убеждаемся, что VirtualDub замечательно читает полученный после конвертации файл.
Чудесно и никакого надувательства. Однако, 16 бит Gray мы уже потеряли.
http://img-fotki.yandex.ru/get/9164/7035564.6/0_13114d_af488728_origКак и чем посмотреть полученный 16bit Gray ролик?
Найти медиа проигрыватель, способный воспроизвести видео в 16 bit оказалось проблематичным. Но тут на помощь приходит тот же ffmpeg и ffplay.
Во избежание недоразумений, имеет смысл скопировать исходный ролик, с тем, чтобы не испортить его(такие шансы есть) в процессе экспериментов.
Кроме того, нужно положить ffplay.exe в ту же папку, что и просматриваемый ролик. Тут нам надо выбрать, в каком формате выводить изображение
команды ffplay:
ffplay L0_2013-11-18-073506.avi
проигрывает оригинал в исходном качестве, с паузами
В следующих вариантах задается кодек для потока
ffmpeg -i L0_2013-11-18-073506.avi -f avi - | ffplay -
проигрывает ровно, но с урезанным качеством, в 25fps
ffmpeg -i L0_2013-11-18-073506.avi -f matroska - | ffplay -
проигрывает в исходном качестве, тоже с паузами
На данном этапе все упирается в невозможность работать с роликами 16 битном формате для Autostakkert и WinJupos. Пока что единственный вариант - полученный ролик конвертировать в меньшую разрядность для последующей обработки. Например, PIPP преобразует его в формат monochrome Pal8.
Итак, если камера имеет разрядность 10/12/16 бит, но выдает видео поток в 8 бит, предложенный способ позволяет относительно простыми средствами выжать из нее максимум и преобразовать серию снимков в ролик без потери разрядности и качества.
А результат сохранить до лучших времен.