Фон
Вы когда-нибудь смотрели видео северного сияния? Завораживающие лучи света, которые кружатся и танцуют по усыпанному звездами небу. Это еще более потрясающее зрелище, когда на их фоне кристально чистые воды плавно перетекают между и под ледяными корками. Дополняя друг друга, движущиеся небо и вода создают динамичную сцену, отражающую постоянный ритм матери-природы.
Теперь представьте, что видеозапись застыла в виде изображения: Оно по-прежнему выглядит красиво, но лишено динамизма видео. Такой контраст между неподвижными и движущимися изображениями показывает, что видео иногда лучше, чем неподвижные изображения, когда речь идет о запечатлении величественных пейзажей, поскольку первые могут передать больше информации и, следовательно, быть более увлекательными.
Возможно, именно по этой причине мы иногда жалеем, что просто сфотографировали, а не сняли видео, когда встречаем красивый пейзаж или памятный момент.
В дополнение к этому, когда мы пытаемся добавить статичное изображение в короткое видео, мы обнаруживаем, что переход между изображением и другими сегментами видео выглядит очень неловко, поскольку изображение — единственный статичный сегмент во всем видео.
Если мы хотим превратить статичное изображение в динамичное видео, добавив некоторые эффекты движения к небу и воде, один из способов сделать это — использовать профессиональную компьютерную программу для изменения изображения. Однако этот процесс зачастую очень сложен и требует много времени: Он требует корректировки временной шкалы, кадров и многого другого, что может оказаться непосильной задачей для редакторов изображений-любителей.
К счастью, сейчас существует множество возможностей, управляемых искусственным интеллектом, которые могут автоматически создавать таймлапс-видео для пользователей. Я решил воспользоваться функцией автоматического таймлапса, предоставляемой HMS Core Video Editor Kit. Она может автоматически определять небо и воду на изображении и создавать для них яркие динамические эффекты, как здесь:
Скорость движения и угол наклона неба и воды можно настраивать.
Теперь давайте рассмотрим подробную процедуру интеграции этой возможности, чтобы лучше понять, как создается такой динамический эффект.
Процедура интеграции
Подготовка
i. Настройте необходимую информацию о приложении. На этом этапе необходимо зарегистрировать учетную запись разработчика, создать приложение, сгенерировать отпечаток сертификата подписи, настроить отпечаток и включить необходимые службы.
ii. Интегрируйте SDK комплекта.
iii. Настройте скрипты обфускации.
iv. Объявите необходимые разрешения.
Конфигурация проекта
i. Задайте информацию об аутентификации приложения. Это можно сделать с помощью ключа API или маркера доступа.
- Установите ключ API с помощью метода setApiKey: Вам нужно установить информацию об аутентификации приложения только один раз во время инициализации приложения.
MediaApplication.getInstance().setApiKey("your ApiKey");
- Или задайте маркер доступа с помощью метода setAccessToken: Вам нужно установить информацию аутентификации приложения только один раз во время инициализации приложения.
MediaApplication.getInstance().setAccessToken("your access token");
ii. Задайте идентификатор лицензии. Этот идентификатор должен быть уникальным, поскольку он используется для управления квотами использования сервиса.
MediaApplication.getInstance().setLicenseId("License ID");
iii. Инициализируйте среду выполнения для объекта HuaweiVideoEditor. Не забудьте освободить объект HuaweiVideoEditor при выходе из проекта.
- Создайте объект HuaweiVideoEditor.
HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());
- Укажите положение области предварительного просмотра. Такая область используется для рендеринга видеоизображений, что реализуется SurfaceView, созданным в SDK. Прежде чем создавать такую область, сначала укажите ее положение в приложении.
<LinearLayout
android:id="@+id/video_content_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/video_edit_main_bg_color"
android:gravity="center"
android:orientation="vertical" />
// Specify the preview area position.
LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);
// Specify the preview area layout.
editor.setDisplay(mSdkPreviewContainer);
- Инициализируйте среду выполнения. Если проверка лицензии не удалась, будет выброшен LicenseException.
После создания объект HuaweiVideoEditor не будет занимать системные ресурсы. Вам необходимо вручную установить, когда будет инициализирована среда выполнения объекта. После этого в SDK будут созданы необходимые потоки и таймеры.
try {
editor.initEnvironment();
} catch (LicenseException error) {
SmartLog.e(TAG, "initEnvironment failed: " + error.getErrorMsg());
finish();
return;
}
Разработка функций
// Initialize the auto-timelapse engine.
imageAsset.initTimeLapseEngine(new HVEAIInitialCallback() {
@Override
public void onProgress(int progress) {
// Callback when the initialization progress is received.
}
@Override
public void onSuccess() {
// Callback when the initialization is successful.
}
@Override
public void onError(int errorCode, String errorMessage) {
// Callback when the initialization failed.
}
});
// When the initialization is successful, check whether there is sky or water in the image.
int motionType = -1;
imageAsset.detectTimeLapse(new HVETimeLapseDetectCallback() {
@Override
public void onResult(int state) {
// Record the state parameter, which is used to define a motion effect.
motionType = state;
}
});
// skySpeed indicates the speed at which the sky moves; skyAngle indicates the direction to which the sky moves; waterSpeed indicates the speed at which the water moves; waterAngle indicates the direction to which the water moves.
HVETimeLapseEffectOptions options =
new HVETimeLapseEffectOptions.Builder().setMotionType(motionType)
.setSkySpeed(skySpeed)
.setSkyAngle(skyAngle)
.setWaterAngle(waterAngle)
.setWaterSpeed(waterSpeed)
.build();
// Add the auto-timelapse effect.
imageAsset.addTimeLapseEffect(options, new HVEAIProcessCallback() {
@Override
public void onProgress(int progress) {
}
@Override
public void onSuccess() {
}
@Override
public void onError(int errorCode, String errorMessage) {
}
});
// Stop applying the auto-timelapse effect.
imageAsset.interruptTimeLapse();
// Remove the auto-timelapse effect.
imageAsset.removeTimeLapseEffect();
Теперь возможность автотаймлапса успешно интегрирована в приложение.
Заключение
При съемке живописных пейзажей видео, которое может показать динамику окружающего нас мира, часто является лучшим выбором, чем статичные изображения. Кроме того, при создании видео с несколькими кадрами динамичные изображения обеспечивают более плавный эффект перехода, чем статичные.
Однако пользователи, не знакомые с процессом анимации статичных изображений, при попытке сделать это вручную с помощью компьютерных программ могут получить неудовлетворительные результаты.
Хорошей новостью является то, что теперь существуют мобильные приложения, интегрированные с такими возможностями, как функция автотаймлапс Video Editor Kit, которая может создавать эффекты таймлапса для пользователей. Создаваемый эффект выглядит достоверно и естественно, эта функция проста в использовании, а ее интеграция не вызывает сложностей. С такими возможностями приложение для редактирования видео/изображений может обеспечить пользователям более увлекательный пользовательский опыт.
В дополнение к приложениям для редактирования видео/изображений, я считаю, что возможность автотаймлапса может быть использована и многими другими типами приложений. Как вы думаете, какие еще приложения могли бы воспользоваться такой функцией? Дайте мне знать в разделе комментариев.