Мобильное приложение для обработки видео — общий обзор технологии

Взрыв медийных социальных сетей очевиден в современном обществе, от развлечений до политики, от частного до общественного секторов, изображения и видео можно найти повсюду. Наблюдается рост социальных сетей, ориентированных на медиа, таких как Snapchat и Instagram, и пользователей, которые предпочитают улучшать свои изображения и видео с помощью различных визуальных эффектов. Из-за этого обработка мобильного видео становится обязательной функцией практически для любого приложения для социальных сетей. Изображение стоит 1000 слов, а видео стоит в среднем 30 изображений в секунду.

HyperSense разрабатывает мобильные приложения для обработки видео для iOS и Android с 2012 года. Первым нашим приложением такого типа было iFlipBook. С тех пор мы расширили свою область знаний и в 2015 году запустили MyBlender, мобильное приложение для iOS и Android с вычислительной мощностью профессионального инструмента (MyBlender начинался с целью разработки мобильного приложения для обработки видео, способного применения тех же эффектов, что и Adobe Premiere). Если вам интересно узнать о возможностях MyBlender, ознакомьтесь с плейлистом на Youtube ниже или загрузите приложение для iOS из App Store:

В этой статье мы представляем общий обзор разработки мобильного приложения для обработки видео. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с нами, и мы будем рады ответить.

Обработка изображения

Цифровая обработка изображений включает в себя применение наборов алгоритмов, которые изменяют пиксели изображения. Обработка видео очень похожа, поскольку включает применение одних и тех же алгоритмов к каждому кадру видео. Существует несколько этапов обработки, которые применяются к изображениям или видео. Целью некоторых является оптимизация, в то время как другие добавляют визуальные эффекты. Затем медиа-ресурсы могут быть закодированы и сжаты, чтобы стать доступными на мобильных устройствах, настольных компьютерах, носимых устройствах и так далее.

Общий термин, используемый для набора алгоритмов, используемых для изменения изображений, называется Фильтр. Фильтры изменяют информацию в изображениях на основе заданного алгоритма. Итак, по сути, у вас есть изображение и правило модификации. Но как это работает?

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

Чтобы лучше понять фильтры, представьте, что они получают набор пикселей и после обработки экспортируют новый пиксель.

Фильтры могут применяться на уровне GPU и CPU, но наиболее эффективные с точки зрения скорости применяются GPU. Эти фильтры графического процессора используют определенный язык и называются шейдерами. Существуют некоторые ограничения на количество разрешенных операций, и большинство шейдеров предназначены для быстрой работы. Если шейдер нельзя использовать в реальном времени, его ценность падает.

Обработка изображения состоит из двух шагов:

  • цвет пикселя
  • положение пикселя

Изменение положения пикселя часто приводит к поворотам (2D или 3D), изменениям масштаба и перемещениям. Вы также можете создавать пазлы с изображениями. Этот тип изменения будет называться Vertex. Изменение пикселя также может привести к появлению серых изображений, наложению цветов, изменению контрастности, выделению и т. д. Эти изменения будут называться фрагментами.

Простая вершина:

attribute vec4 position; attribute vec2 inputTextureCoordinate; varying vec2 textureCoordinate; void main() { gl_Position = position; textureCoordinate = inputTextureCoordinate; }

Это не изменяет координаты пикселей, оставляя каждый пиксель в исходном положении.

Вышеупомянутая вершина в сочетании со следующим фрагментом:

precision highp float; varying lowp vec2 textureCoordinate; // New uniform sampler2D srcTexture1; // New const vec3 W = vec3(0.2125, 0.7154, 0.0721); void main() { vec4 textureColor = texture2D(srcTexture1, textureCoordinate); float luminance = dot(textureColor.rgb, W); gl_FragColor = vec4(vec3(luminance), textureColor.a); }

В результате получится черно-белая версия исходного изображения.

Более сложные шейдеры могут использовать несколько входных изображений. Например, вы можете наложить 2 изображения или сшить изображения одно рядом с другим. Принцип остается прежним, вершина определяет положение каждого пикселя, а фрагмент определяет цвет пикселя.

Например, если мы хотим добавить наклейку поверх изображения, мы должны:

  • убедитесь, что изображения имеют одинаковый размер или установите положение стикера на большее изображение;
  • оставить каждый пиксель в его исходном положении, используя вариант вершины выше, который имеет 2 входа (по одному для каждого изображения);
  • установите цветовое слияние пикселей, используя альфа-канал стикера в качестве приоритета: original_rgb * (1-sticker_alpha) + sticker_rgb * sticker_alpha

Как только вы поймете, что такое обработка изображений, вы можете перейти к обработке видео. В конце концов, обработка видео — это просто обработка большего количества изображений (если не учитывать сжатие видео, управление памятью, многопоточность, работу с фреймбуферами камеры и т. д.).

Обработка видео

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

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

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

Добавление звука изменит диаграмму на:

Наиболее распространенными звуковыми фильтрами являются регулировки громкости.

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

Есть еще один важный аспект при обработке видео: синхронизация. Например, 2 видео можно обработать несколькими способами:

  • видео1-видео2
  • видео1-перекрытие-видео2
  • видео1+видео2

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

Видео в большинстве кодировок не имеют альфа-канала, все пиксели непрозрачны. Это сделано для того, чтобы оптимизировать размер видеофайла.

Для некоторых видеоэффектов отсутствие альфа-канала не является проблемой:

  • отображение видео поверх другого;
  • отображение видео рядом с другим;
  • воспроизведение роликов друг за другом, с различными переходами между ними;
  • использование эффектов затухания с альфа-каналом каждого изображения, установленным на 0,5 при объединении.

Чтобы покрыть некоторые эффекты, требующие альфа-канала, существуют различные обходные пути, наиболее часто используемые: хроматический ключ, матирование дорожки. Хроматический ключ использует определенный цвет для определения значения альфа-канала (обычно зеленый). Чем ближе пиксель к этому цвету, тем выше будет альфа-канал на этапе обработки. Trackmate использует черно-белую матрицу вместе с двумя видео. Например, если пиксель матрицы белый, то будет возвращен пиксель из видео 1, если он черный, будет возвращен пиксель из видео 2, а любое другое изменение приведет к слиянию.

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

Первоначально опубликовано на сайте hypersense-software.com 18 марта 2018 г.