Transcodes and compresses video files into the MP4 format, with audio support, using hardware-accelerated Android codecs available on the device. Works on API 21+.
- Fast transcoding to AAC/AVC
- Hardware accelerated
- Convenient, fluent API
- Thumbnails support
- Concatenate multiple video and audio tracks [docs]
- Clip or trim video segments [docs]
- Choose output size, with automatic cropping [docs]
- Choose output rotation [docs]
- Choose output speed [docs]
- Choose output frame rate [docs]
- Choose output audio channels [docs]
- Choose output audio sample rate [docs]
- Override frames timestamp, e.g. to slow down the middle part of the video [docs]
- Error handling [docs]
- Configurable validators to e.g. avoid transcoding if the source is already compressed enough [docs]
- Configurable video and audio strategies [docs]
// build.gradle.kts
dependencies {
implementation("io.deepmedia.community:transcoder-android:0.11.1")
}
This project started as a fork of ypresto/android-transcoder. With respect to the source project, which misses most of the functionality listed above, we have also fixed a huge number of bugs and are much less conservative when choosing options that might not be supported. The source project will always throw - for example, accepting only 16:9, AVC Baseline Profile videos - we prefer to try and let the codec fail if it wants to.
Transcoder is trusted and supported by ShareChat, a social media app with over 100 million downloads.
Please check out the official website for setup instructions and documentation.
You may also check the demo app (under /demo
) for a complete example.
Transcoder.into(filePath)
.addDataSource(context, uri) // or...
.addDataSource(filePath) // or...
.addDataSource(fileDescriptor) // or...
.addDataSource(dataSource)
.setListener(object : TranscoderListener {
override fun onTranscodeProgress(progress: Double) = Unit
override fun onTranscodeCompleted(successCode: Int) = Unit
override fun onTranscodeCanceled() = Unit
override fun onTranscodeFailed(exception: Throwable) = Unit
}).transcode()