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




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

О чем пишут?

Коллега по искусству

Дорогой коллега по искусству Солженицын! Я, как американский артист, должен ответить на некоторые ваши обвинения, публикуемые капиталистической прессой во всем мире. По моему мнению, они являются ложными обвинениями, и народы мира должны знать, почему они ложные. Вы заклеймили Советский Союз как ..
Дальше..

Я так вижу!

21.10.2013

21.10.2013

Петавий 21.10.2013. SW25012, ЛБ2x+(3,2),Flea3,IR74
2


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

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





Склейка 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 видео ролике .