Зарегистрировано: 331




Помощь  Карта сайта

О чем пишут?

Интервью с основателем Instagram

Интервью с основателем Instagram Кевином Систромом Вечером 20 июня фотосервис Instagram избавился от приставки «фото-»: приложение научилось записывать, обрабатывать и выкладывать в Сеть короткие видеоролики. Это первое серьезное обновление функционала сервиса с момента его создания, поэтому ..
Дальше..

Я так вижу!

В обсерватории3.jpg

В обсерватории3.jpg



Воробино
Через турбуленцию к звездам
В блоге представлены фото с моего сетапа. Первую зиму телескоп пережил на кухне, летом поселился на балконе с видом на залив, на окраине Петербурга. См. статью про наблюдения через балконную дверь. На балконе сиинг лучше, но места меньше. В итоге, была сделана мини-опора, вместо штатной треноги, а теперь в планах ..
Письмо | Сообщение | ВКонтакте | Астрофорум |

Для добавления вашего собственного контента, а также для загрузки текстов целиком, загрузки текстов без разбиения на страницы, загрузки книг без разбиения на тексты, для работы с закладками необходима авторизация. Если вы зарегистрированы на сайте, введите свой логин и пароль. Если нет, пожалуйста, пройдите на регистрацию





Склейка 16bpp Gray серии кадров в видео-ролик и преобразование разрядности
/pterodactilus vulgaris/
29.09.2014


Upd.

Автором написана программа PGMania для автоматизации описанных в статье операций. PGMania использует библиотеки FFMPeg и ImageMagick для построения видео из последовательности изображений и поддержки различных форматов.
Тем не менее, статья не теряет своей актуальности, т.к. позволяет вникнуть в суть встающих при решении подобных задач вопросов.

____________________________________________________________________

Ситуация такая. Есть приличная ч/б видео-камера Point Grey Flea3. Камера 16-ти разрядная, скоростная, чувствительная, с наличием многих режимов и опций, и по всем статьям подходящая для планетной съемки.

Но есть один существенный недостаток - ее родная программа FlyCap2, делающая захват видео с камеры выдает на компьютер 8 бит, а не 16. Это обстоятельство сводит достоинства самой камеры на нет и загоняет ее в один ряд с более дешевыми астро-камерами.

Известно, что данная камера и FlyCap2 умеют писать на компьютер серии отдельных кадров в 12/16 бит. Но программы обработки астро-фото работают, в основном, с видеороликами в .avi или с фото в .ser форматах. Таким образом, встала задача преобразовать серию снимков 16 бит .pgm в видео-ролик 16 бит .avi и скормить его Autostakkert'у и WinJupos.

Есть такая жутко мощная штука, как ffmpg. Это набор С++ библиотек для работы c видео, фото, звуком. На ее базе построены многие известные ЛА приложения. Наткнулся на статью с описанием некоторых ее функций и попытался поработать с ней напрямую.

Если у вас стоит Windows, то скачиваем ffmpeg отсюда и распаковываем.
Например, сюда 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

Если, при этом, вы получили сообщение, что система не знает, что такое ffmpeg, положите копию файла ffmpeg.exe в ту же папку, что и обрабатываемые снимки. Это поможет.

После этого в 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, которая является оберткой для ffmpeg. Программа имеет простой человеческий интерфейс и без каких-либо затыков собрала за пару минут полноценный ролик .wmv из всех кадров, находящихся в исходной папке. Дальше отправляем полученный файл на переплавку, т.е. конвертируем в .avi формат. Дальше обрабатываем, как обычно.

Однако, все описанные выше варианты работали с 8 бит и с компрессией. Задача же заключалась в том, чтобы 16-битные .pgm засунуть в 16 же битный видеоролик и желательно без потери качества (lossless).

Дальнейшие поиски привели к дискуссии в интернете. Опыты с предложенными там решениями выдали уже более вменяемые результаты, с использованием кодека 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 бит.




Однако, чтобы их воспроизвести, пришлось установить декомпрессор XMedia Recode для ffv1. Эта программа, кроме того, является замечательным и серьезным универсальным конвертором.



На данном этапе нам нужно открыть ролики в VirtualDub. Для этого воспользуемся кодеком huffYUV, color mode выберем Planar 16bpp. Добавим job и выполним конверсию. После этого с радостью убеждаемся, что VirtualDub замечательно читает полученный после конвертации файл.

Чудесно и никакого надувательства. Однако, 16 бит Gray мы уже потеряли.



Как и чем посмотреть полученный 16bit Gray ролик? Найти медиа проигрыватель, способный воспроизвести видео в 16 bit оказалось проблематичным. Условно 16 битный ролик можно посмотреть в том же XMedia Recode (с перекодированием при просмотре и в маленьком масштабе) или в WindowsPlayer от питерской команды iTVA (не путать с Windows Media Player от Microsoft). Он воспроизводит без особых проблем (кроме скорости).

Но тут на помощь приходит тот же 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. Однако, можно перевести ролик в формат .ser и вполне успешно обработать его. Как в Autostakkert, так и в WinJupos. Например, PIPP преобразует 16bpp .avi в формат .ser 8/16 gray .

Итак, если камера имеет разрядность 10/12/16 бит, но выдает видео поток в 8 бит, предложенный способ позволяет относительно простыми средствами выжать из нее максимум и пустить в обработку кадры без потери разрядности и качества.
А результат хранить в полноценном 16 bit видео ролике .