Вступление

Начинал я давно с фотографии, которая в первое время казалась мне чем-то непонятным, чем-то сказочным и интересным. Но никогда профессионально я этим не занимался. С течением времени, с развитием технологий, Photoshop начал творить такие чудеса, что фотография стала по бóльшей части опытом работы в этой программе, чем реальным фото-процессом. И в какой-то момент наступило насыщение. Когда фотография из искусства превращается в рутину, умение долго и аккуратно работать в Photoshop, она перестает привлекать. Так случилось и со мной. Мне нравится фотография, но я считаю, что профессионал заключается в том, что делает такой кадр, который почти не требует обработки. А я не профи, я достаточно много времени проводил в Photoshop’е. И я потух.


Photoshop для меня почти как родной. Я понимаю многие техники обработки, и некоторые умею применять не вспоминая основ. И теперь меня очень сложно удивить фотографией. Глядя на фото, я понимаю, где схитрил фотограф, где он чуть дольше посидел за компьютером. Фотография стала скучной. Иногда фото с мобильного телефона не отличить от фото с профессионального фотоаппарата. Выдает только глубина резкости, на которою ни один телефон (пока-что) не способен.

Стало понятно, что надо расти. И совершенно случайно я наткнулся сначала на канал, связанный с мобильным видео. Потом на уроки по покраске видео. Я сделал нарезку из путешествия по Италии, и мне показалась она прикольной. Впоследствии я понял, что это то еще говно. Но самое удивительное то, что даже такое говно хрен так просто найдешь. Людей очень напрягает учиться и стараться.
Меня затянула тема мобильного видео. Мобильного, потому что я прекрасно понимаю, сколько бабла требует съемка на камеру или фотоаппарат. Стекла, стабилизаторы, аппаратура, способная обработать видео. А мобильное видео доступно, всегда в кармане, стабилизаторы стоят не так и дорого. Есть дополнительные линзы, чтобы хоть чуточку расширить возможности. Короче все красиво, осталось найти программу для записи, которая даст возможность делать «киношную» картинку. Все видео о «киношной» картинке рассказывали о программах на iPhone, и мне как поклоннику Sony, они никак не подходили. Впоследствии оказалось, что есть такая замечательная всеми любимая программа как Filmic Pro. И она доступна на Android. Меня даже не пугала стоимость в 12 евро. Я побежал покупать…

Какого же было мое разочарование, когда я увидел надпись, что приложение не подходит для моей модели телефона. И я искал. Нашел старую версию, которая работала на треть. Но что снимала, то снимала замечательно. Написал им письмо, на которое они ответили, что не дружат с Sony, и пока не планируют по причине скрытия какой-то информации по камере в телефоне.

Ничего не оставалось, как искать что-то полноценное, работающее на моем телефоне. Я перепробовал кучу приложений, и некоторые из них работали достаточно хорошо. Но недостаточно хорошо, чтобы уделать старую версию Filmic Pro. В какой-то момент на моем телефоне перестала работать OpenCamera (русская версия этой программы — HedgeCam). Как только я выставлял ISO в ручном режиме, скорость записи видео падала до 10 кадров в секунду. Как только я накручивал баланс белого, у меня случался черный экран. Общение с ребятами, программирующими HedgeCam не дали результатов. Я был в отчаянии (не сюрьезно).

Мне ничего не оставалось, как написать программу самому, под свои нужды, со своими настройками. Не знаю, нахрена мне это было надо, ведь я до сих пор не снял ни одного более менее нормального видео.

Первое, что я сделал, это скачал проект с открытым кодом HedgeCam. Отмучался не по-детски, но так и не смог заставить проект работать. Переключился на OpenCamera — тот же результат.

И вот настал момент осознания того, что все придется делать самому.

Перво-наперво я нашел пример от Google и стал его развивать. В принципе с ним не было особенных проблем. Проблема была в понимании структуры проекта в AndoidStudio. И в конечном счете я дорос до программы, которая имела все важные для меня настройки. Я изучил как работает трансформация цвета, кривая контрастности, какие-то gains (которые тоже влияют на цвет) всякие мелочи, связанные с внешним видом программы и ее функционалом. Кучу времени я потратил на поиски правильных Exposure time и Sensor duration в микро(или макро?)секундах. Я проводил опыты, и разные установки этих параметров давали разный результат. Видео то дергалось, то шло плавно. С течением времени я нашел нужные мне величины этих двух параметров. Камера работала (работает) в 24, 25 и 30 кадрах в секунду с фиксированными выдержками (обычно кратными к/с). В процессе я понял, что эти два параметра не могут друг без друга. И вроде хорошо, и вроде все есть. Но что-то с этими видео не так. Я отмечал, что видео в некоторые моменты имеют микрофризы, подергивания. Изучение этого вопроса дало понять, что в местах подергиваний по два одинаковых кадра. Это разочаровывало, ибо не имело какой-то закономерности, все намекало на производительность системы. Заводская камера при том же битрейте работала лучше. Я списывал это на ручные настройки, выдержку, частоту работы сенсора и др. И эта тема не давала мне покоя. Я снял огромнейшее количество тестового материала. Отмечал, что нравится, удалял, что совсем не катит.
Но когда я заходил в Filmic Pro, снимал тестовое видео там, я понимал, что проблема не только в производительности системы. Есть что-то глубже. Видео файлы Filmic Pro имели другую медиа информацию, отличную от всех известных мне приложений в магазине Android. И я стал копать еще глубже. Еще больше тестов, еще больше прочитанного по ночам материала. И случилось чудо.

MediaCodec. Это то, с чем работают мое заводское приложение и Filmic Pro. Все известные мне сторонние камеры работают с MediaRecorder’ом. Я не знаю, в чем реальное отличие внутри системы. Но я убедился на собственном опыте, что MediaRecorder менее гибок и более легок в программировании. Чтобы сделать программу-набросок, основанную на MediaRecorder’е, мне потребовалось 2 дня. Поэтому абсолютное большинство выбирают именно этот путь. А зря. Именно MediaCodec дал возможность записывать плавные видео почти на максимальных настройках (без звука). MediaCodec дал возможность повторить те же самые настройки, что в старой версии программы Filmic Pro. Но в отличие от моей программы Filmic не умел 24 и 25 кадров. Сегодня я с уверенностью на 99% могу сказать, что почти все заводские приложения работают через MediaCodec. Возможно, некоторые еще глубже — с FFmpeg. Но точно не с MediaRecorder’ом. Потому что MediaRecorder это конструктор, отжирающий какие-то системные ресурсы, причем достаточно приличные.

Первое, что мне бросалось в глаза, когда я сравнивал файлы первой версии программы и FilmicPro — это уровень профиля кодека. Этот уровень можно указать в последних ОС Android и для MediaRecorder’а (я так и сделал), но точно нельзя указать параметр GOP. Filmic использует профиль Baseline, который имеет минимальный уровень сжатия (качество выше, размер файла больше) и при этом меньше нагружает систему. Также Filmic использует параметр GOP: ключевой кадр каждые 2 секунды. При скорости в 30 кадров в секунду получается, что каждый 60-ый кадр ключевой. Это так же значит, что все промежуточные надо будет закодировать, что требует ресурсов. Поэтому в новой версии программы я оставил ключевой кадр каждую секунду. Мне показалось, что это дало результаты.

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

Так что приглашаю почитать, кому интересно. Надеюсь, что не заброшу это дело. Хотя бы до момента выхода официальной версии. Раздавать программу не планирую, ибо не хочу иметь постоянный фидбэк. Опыт работы программистом научил тому, что у людей слишком много запросов, и 99% из них страннее странного.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.