Integrating FFmpeg for Media Processing in Mobile Apps

Why FFmpeg on a Mobile Device? You're developing a video editing app, and built-in frameworks (AVFoundation, MediaCodec) fall short. You need frame-accurate trimming, concatenation of multiple clips, hardware acceleration, and flexible encoding settings. Sending video to a server is slow and expe

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
Integrating FFmpeg for Media Processing in Mobile Apps
Complex
~3-5 days

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    783
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    598

Why FFmpeg on a Mobile Device?

You're developing a video editing app, and built-in frameworks (AVFoundation, MediaCodec) fall short. You need frame-accurate trimming, concatenation of multiple clips, hardware acceleration, and flexible encoding settings. Sending video to a server is slow and expensive, and users demand privacy. FFmpeg solves these tasks directly on the device. We integrate it into iOS, Android, and Flutter, configure the optimal ffmpeg-kit build, and connect hardware encoders VideoToolbox or MediaCodec. This reduces CPU load and accelerates processing by 5–10x. With over 50 successful media processing integrations, we guarantee compatibility with App Store and Google Play requirements — including app size optimization and license compliance.

What Problems Does FFmpeg Solve on Mobile?

FFmpeg enables any media file operation: transcoding, trimming, concatenation, watermarking, volume adjustment, and more. Here are typical commands:

Operation Example Command Use Case
Transcoding -c:v libx264 -preset ultrafast -crf 23 Compress video before upload
Trimming (frame-accurate) -ss 00:00:10 -to 00:00:30 Creating clips
Concatenation -f concat -safe 0 -i filelist.txt -c copy Merging multiple clips
Audio extraction -vn -acodec copy Getting a track for podcast
Watermark overlay -filter_complex "overlay=W-w-10:H-h-10" Branding content
Volume change -af volume=0.5 Audio normalization
Image insertion -i image.png -filter_complex overlay Logo overlay on video

For quick trimming, use -c copy — no re-encoding, keyframe accuracy. For frame-accurate trimming, omit -c copy but it takes longer. In UI, offer a choice: "Fast Trim" and "Accurate Trim".

How to Choose the Optimal ffmpeg-kit Build?

The build choice directly affects app size and available functionality. The minimal build (min) weighs 8–12 MB and includes basic codecs (H.264, AAC) — enough for trimming and conversion. If you need HTTPS support (e.g., downloading files over network) — choose the https build. For H.265, VP9, or audio codecs FLAC/opus, full (~50 MB) is required. For GPL-compatible projects, use full-gpl. We recommend the https build as the optimal balance of functionality and size. More details on variants can be found in the ffmpeg-kit documentation.

Build Size Codecs Features
min 8–12 MB H.264, AAC Basic, no network
https 12–15 MB + HTTPS For upload/download
full up to 50 MB All All codecs, heavy
full-gpl up to 50 MB All GPL license

How to Integrate FFmpeg into a Project?

iOS. ffmpeg-kit with CocoaPods — minimal setup in 15 minutes:

// Podfile pod 'ffmpeg-kit-ios-https', '~> 6.0' // Usage FFmpegKit.executeAsync("-i input.mp4 -vn -acodec copy output.aac") { session in guard let returnCode = session?.getReturnCode() else { return } if ReturnCode.isSuccess(returnCode) { print("Done: \(session?.getOutput() ?? "")") } else { print("Error: \(session?.getLogsAsString() ?? "")") } } 

Android. Via Maven:

implementation("com.arthenica:ffmpeg-kit-android-https:6.0.LTS") FFmpegKit.executeAsync( "-i input.mp4 -vf scale=1280:720 -c:v libx264 -preset ultrafast -crf 23 output.mp4" ) { session -> if (ReturnCode.isSuccess(session.returnCode)) { // process result on main thread } } 

Flutter. Install the ffmpeg_kit_flutter package from pub.dev — Dart wrapper identical to native API.

Monitoring Processing Progress

FFmpeg writes progress to stderr. ffmpeg-kit provides StatisticsCallback, where getTime() returns the current position in milliseconds. Obtain total duration via FFprobeKit.getMediaInformationAsync.

FFmpegKit.executeAsync(command, withCompleteCallback: { session in /* complete */ }, withLogCallback: nil, withStatisticsCallback: { stats in guard let duration = totalDurationMs else { return } let progress = Double(stats?.getTime() ?? 0) / duration DispatchQueue.main.async { self.progressBar.progress = Float(progress) } } ) 

Step-by-Step Integration Guide

  1. Choose a build. Determine required codecs and protocols. For a typical app — https.
  2. Add dependency. Include the dependency (CocoaPods, Maven, or pub.dev). Test a basic command, e.g., getting file info.
  3. Optimize performance. Enable hardware acceleration via h264_videotoolbox (iOS) or h264_mediacodec (Android) with a software fallback.

On iPhone 14 Pro, transcoding a 1-minute 1080p video via libx264 ultrafast takes 45–60 seconds. That's too long for UX. We use hardware encoders: iOS — h264_videotoolbox (via VideoToolbox) — 5–10x faster, but less bitrate control. Android — h264_mediacodec (via MediaCodec) — similar. Add a software fallback:

val command = if (isHardwareEncoderAvailable()) { "-i input.mp4 -c:v h264_mediacodec output.mp4" } else { "-i input.mp4 -c:v libx264 -preset ultrafast output.mp4" } 

Binary size: the full build adds 30–50 MB to the app, min — 8–12 MB. Choose the minimal one for specific tasks.

What’s Included in the Integration?

  • Selection and configuration of the optimal ffmpeg-kit build (considering licenses and size).
  • Development of an API for commands (transcoding, trimming, concatenation, etc.).
  • Integration of progress monitoring and UI display.
  • Hardware acceleration support with fallback.
  • ProGuard/R8 configuration (Android) for minification.
  • Usage documentation.
  • Testing on 5+ real devices.
  • Post-deployment support for 30 days.

FFmpeg integration reduces server processing costs by up to 40%, saving infrastructure budget. It pays for itself within 2–3 months. Contact us for a project assessment — we'll prepare a proposal within 1 business day. Request a consultation to discuss details and get a tailored work plan.