Реализация обрезки и редактирования видео в мобильном приложении

Реализация обрезки и редактирования видео в мобильном приложении Мы сталкиваемся с задачей внедрения видеоредактора почти в каждом втором мобильном проекте. Клиенты хотят, чтобы пользователь мог обрезать лишние секунды, склеить несколько клипов или наложить текст — и всё это без зависаний на 30 с

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация обрезки и редактирования видео в мобильном приложении
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Реализация обрезки и редактирования видео в мобильном приложении

Мы сталкиваемся с задачей внедрения видеоредактора почти в каждом втором мобильном проекте. Клиенты хотят, чтобы пользователь мог обрезать лишние секунды, склеить несколько клипов или наложить текст — и всё это без зависаний на 30 секунд. Кажется, что API для работы с видео есть на каждой платформе, но подводных камней хватает: frame-accurate trimming, плавный таймлайн, быстрый экспорт без блокировки UI. Разберём, как мы решаем эти проблемы на iOS и Android.

Почему обрезка видео — не тривиальная задача?

Обрезка по времени (trimming). На iOS мы используем AVAssetExportSession с timeRange:

exportSession.timeRange = CMTimeRange( start: CMTime(seconds: startTime, preferredTimescale: 600), duration: CMTime(seconds: duration, preferredTimescale: 600) ) 

preferredTimescale: 600 — стандарт для видео, кратен 24/25/30/60 fps. Использование timescale: 1 даёт ошибки округления на фреймах. На Android — MediaMuxer + MediaExtractor для frame-accurate trimming без перекодирования (только если совпадают ключевые кадры). Если нет — Transformer из media3 с явным перекодированием. Такой подход гарантирует точность до кадра, что критично для профессионального монтажа.

Как объединить клипы без потери качества?

Объединение клипов. iOS: AVMutableComposition — добавляем AVMutableCompositionTrack для видео и аудио, вставляем через insertTimeRange(_:of:at:). Важно: аудиодорожки объединяются отдельно от видеодорожек, иначе рассинхронизация. Android: media3 Transformer с Composition API (1.2.x+). Последовательность клипов — EditedMediaItemSequence. Мы настраиваем аудиомикс так, чтобы переходы были бесшовными — никаких щелчков или задержек.

Текстовые оверлеи. iOS: AVVideoComposition + AVVideoCompositionCoreAnimationTool. Создаём CATextLayer, добавляем анимацию появления через CABasicAnimation, передаём в animationTool. На Android — OverlayEffect в media3 Transformer или рисуем через Canvas на каждом кадре (медленно, только для короткого контента). Для длинных видео мы предпочитаем нативные оверлеи через SurfaceView — это даёт до 3x прирост производительности по сравнению с Canvas.

Таймлайн-превью

Самая заметная пользователю деталь — полоска с кадрами видео под плеером. Генерируем через AVAssetImageGenerator на iOS:

generator.generateCGImagesAsynchronously(forTimes: times) { _, image, _, _, _ in // обновляем UI на главном потоке } 

requestedTimeToleranceBefore/After = .zero даёт точные кадры, но медленнее. Для таймлайна достаточно CMTime(seconds: 0.1, preferredTimescale: 600) — кадры ближайшие к отметке. На Android — MediaMetadataRetriever.getFrameAtTime() в IO Dispatcher. Мы кешируем сгенерированные кадры в LRU-кэше, чтобы при скролле не было подтормаживаний.

Экспорт

Всегда асинхронно, с прогрессом. iOS: exportSession.progress через Timer каждые 0.1 с. Android: Transformer.addListener с onProgress(progress: Float). Формат вывода: H.264 в MP4 — максимальная совместимость. H.265 (HEVC) — меньше размер, но не все серверы принимают без перекодирования.

Пресет iOS Разрешение Битрейт (прим.)
AVAssetExportPreset640x480 640×480 ~1.5 Мбит/с
AVAssetExportPreset1280x720 1280×720 ~5 Мбит/с
AVAssetExportPreset1920x1080 1920×1080 ~10 Мбит/с
Кастомный AVVideoSettings любое контролируемый

Сравнение производительности: нативная реализация на iOS через AVAssetExportSession в 2–3 раза быстрее аналогичного решения на FFmpeg (в силу аппаратного декодирования). На Android MediaCodec с H.264 даёт до 50% прироста скорости относительно программного кодирования.

Flutter: video_editor

video_editor (pub.dev) предоставляет UI-компоненты (таймлайн, кроппер) поверх ffmpeg_kit_flutter для реальных операций. Плюс — кросс-платформенный Flutter-код для UI. Минус — FFmpeg обрабатывает видео на CPU, что медленнее нативных AVFoundation/MediaCodec решений — разница может достигать 3–5 раз на длинных видео. Для MVP и несложного контента подходит, для production-редактора с частым использованием — предпочтительнее нативная реализация. У нас есть опыт миграции с Flutter-редактора на нативный, это сократило время экспорта с 45 до 12 секунд для 2-минутного ролика.

Что входит в работу

  • Анализ требований к функциональности (обрезка, склейка, оверлеи, эффекты)
  • Проектирование архитектуры: выбор фреймворков, настройка пайплайна обработки
  • Реализация core-модулей: trimming, composition, export с unit-тестами
  • Интеграция таймлайна с превью и обработкой жестов
  • Оптимизация производительности: кэширование кадров, асинхронная обработка, аппаратное ускорение
  • Тестирование на различных устройствах (iPhone SE — iPhone 15 Pro, Xiaomi Redmi — Samsung Galaxy S24)
  • Сборка и деплой в App Store / Google Play с настройкой code signing и provisioning profiles
  • Документация по интеграции (API схемы, примеры кода, инструкция по настройке store)

Мы гарантируем, что реализованный функционал пройдёт модерацию App Store (Section 4.2 — минимализм, 5.1 — конфиденциальность) и Google Play (политика использования медиа).

Сроки и оценка

Базовая обрезка по времени + экспорт — 2–3 рабочих дня. Полноценный редактор с таймлайном, объединением клипов и текстовыми оверлеями — 5–8 рабочих дней. Сроки уточняются после брифинга: на сложность влияет количество эффектов, поддержка HDR, работа с субтитрами. Пишите — оценим ваш проект бесплатно. За 5+ лет мы реализовали более 20 медиа-проектов для iOS и Android, включая потоковые видео-редакторы и приложения для UGC.