SoFunction
Updated on 2025-04-11

Guide to using FFmpeg for audio and video processing on Android

1. Preface

With the rapid development of mobile Internet, audio and video processing technology has become increasingly important in modern applications. FFmpeg is a powerful open source multimedia processing framework, widely used in video editing, conversion and other fields. This article will introduce FFmpeg-Android, an audio and video processing framework compiled and run on the Android platform based on the FFmpeg n4.0 version. This framework performs command-line operations through ProcessBuilder, which can realize video subtitles, size cut, watermark removal, duration clipping, GIF animation, graffiti, audio extraction, splicing, quality compression, acceleration and deceleration, inverted playback, sketching, color balance, blur, nine-grid, adding stickers, filters, split screens, picture synthesis video and other audio and video processing functions.

2. Introduction to FFmpeg-Android

FFmpeg-Android is an audio and video processing framework compiled and run on the Android platform based on the FFmpeg n4.0 version. Through this framework, developers can easily perform various audio and video processing operations in Android applications. FFmpeg-Android uses ProcessBuilder to perform FFmpeg command-line operations, thereby implementing a variety of complex audio and video processing tasks.

3. Function introduction and implementation

3.1. Add video subtitles

With FFmpeg-Android, it is easy to add subtitles to your videos. Here is a sample command to add subtitles to a video:

ffmpeg -i input.mp4 -vf subtitles= output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "subtitles=/path/to/",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.2. Dimensional cutting

FFmpeg-Android supports cutting video sizes. Here is an example command to crop a video:

ffmpeg -i input.mp4 -vf "crop=640:480:0:0" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "crop=640:480:0:0",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.3. Add or remove watermarks

Whether it is adding watermarks to videos or removing watermarks, FFmpeg-Android can do it. Here is an example command to add a watermark:

ffmpeg -i input.mp4 -i  -filter_complex "overlay=10:10" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-i", "/path/to/",
    "-filter_complex", "overlay=10:10",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.4. Duration intercept

FFmpeg-Android allows users to intercept videos with specific lengths. Here are example commands for intercepting video clips:

ffmpeg -i input.mp4 -ss 00:00:30 -t 00:00:10 -c copy output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-ss", "00:00:30",
    "-t", "00:00:10",
    "-c", "copy",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.5. Turn GIF animation

Converting videos to GIF animations is an important feature of FFmpeg-Android. Here is a sample command:

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" 

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "fps=10,scale=320:-1",
    "/path/to/"
)
executeFFmpegCommand(command)

3.6. Graffiti

With FFmpeg-Android, users can doodle on videos. Here is a sample command:

ffmpeg -i input.mp4 -vf "drawbox=x=50:y=50:w=100:h=100:[email protected]" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "drawbox=x=50:y=50:w=100:h=100:[email protected]",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.7. Audio Extraction

Extracting audio from video is one of the basic features of FFmpeg-Android. Here is a sample command:

ffmpeg -i input.mp4 -q:a 0 -map a output.mp3

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-q:a", "0",
    "-map", "a",
    "/path/to/output.mp3"
)
executeFFmpegCommand(command)

3.8. Video stitching

FFmpeg-Android supports splicing multiple video files into a complete video. Here is a sample command:

ffmpeg -f concat -safe 0 -i  -c copy output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-f", "concat",
    "-safe", "0",
    "-i", "/path/to/",
    "-c", "copy",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.9. Mass compression

To reduce the size of video files, FFmpeg-Android provides video quality compression. Here is a sample command:

ffmpeg -i input.mp4 -vcodec h264 -acodec aac -strict -2 output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vcodec", "h264",
    "-acodec", "aac",
    "-strict", "-2",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.10. Acceleration and deceleration

FFmpeg-Android allows users to adjust the playback speed of videos. Here is an example command to accelerate video:

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-filter_complex", "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]",
    "-map", "[v]",
    "-map", "[a]",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.11. Put it upside down

Through FFmpeg-Android, users can play videos in reverse. Here is a sample command:

ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "reverse",
    "-af", "areverse",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.12. Sketch and Filters

FFmpeg-Android provides rich filter effects, including sketching, blur, etc. Here are example commands for applying fuzzy filters:

ffmpeg -i input.mp4 -vf "boxblur=10:1" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-vf", "boxblur=10:1",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.13. Nine-Gate

Nine-grids are a common way to display videos. Here are example commands to split the video into nine grids:

ffmpeg -i input.mp4 -filter_complex "crop=iw/3:ih/3" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-filter_complex", "crop=iw/3:ih/3",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.14. Add stickers

Adding stickers to videos is a way to enhance the fun of videos. Here are example commands for adding stickers:

ffmpeg -i input.mp4 -i  -filter_complex "overlay=10:10" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input.mp4",
    "-i", "/path/to/",
    "-filter_complex", "overlay=10:10",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.15. Split screen

FFmpeg-Android supports split-screen display. Here is a sample command:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-i", "/path/to/input1.mp4",
    "-i", "/path/to/input2.mp4",
    "-filter_complex", "[0:v][1:v]hstack=inputs=2",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

3.16. Picture synthesis video

Users can use FFmpeg-Android to synthesize multiple images into one video. Here is a sample command:

ffmpeg -framerate 1/5 -i img% -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

Kotlin code example:

val command = arrayOf(
    "ffmpeg",
    "-framerate", "1/5",
    "-i", "/path/to/img%",
    "-c:v", "libx264",
    "-r", "30",
    "-pix_fmt", "yuv420p",
    "/path/to/output.mp4"
)
executeFFmpegCommand(command)

4. Kotlin code that executes the FFmpeg command

The functions that execute the FFmpeg command in Kotlin are as follows:

fun executeFFmpegCommand(command: Array<String>) {
    try {
        val processBuilder = ProcessBuilder(*command)
        (true)
        val process = ()

        val reader = BufferedReader(InputStreamReader())
        var line: String?
        while (().also { line = it } != null) {
            println(line)
        }
        ()
    } catch (e: IOException) {
        ()
    } catch (e: InterruptedException) {
        ()
    }
}

5. Conclusion

FFmpeg-Android provides a powerful and flexible solution for audio and video processing on the Android platform. Through this framework, developers can easily implement various complex audio and video processing tasks, thereby improving the application's multimedia processing capabilities and user experience. With the continuous development of audio and video technology, FFmpeg-Android will surely provide solid technical support for more innovative applications.

The above is the detailed content of the Android guide to using FFmpeg for audio and video processing. For more information about Android FFmpeg audio and video processing, please follow my other related articles!