MCPcopy Index your code
hub / github.com/deepmedia/Transcoder

github.com/deepmedia/Transcoder @v0.11.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.11.2 ↗ · + Follow
644 symbols 1,526 edges 120 files 158 documented · 25%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Build Status Release Issues

Project logo

Transcoder

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.2")
}

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()

Extension points exported contracts — how you extend this code

Resizer (Interface)
A general purpose interface that can be used (accepted as a parameter) by video strategies such as {@link com.otaliastud [12 …
lib/src/main/java/com/otaliastudios/transcoder/resize/Resizer.java
TrackStrategy (Interface)
Base class for video/audio format strategy. Video strategies should use a Resizer instance to compute the output [8 implementers]
lib/src/main/java/com/otaliastudios/transcoder/strategy/TrackStrategy.java
DataSource (Interface)
Represents the source of input data. [6 implementers]
lib/src/main/java/com/otaliastudios/transcoder/source/DataSource.java
Validator (Interface)
A validator determines if the transcoding process should proceed or not, after the TrackStrategy have provided t [9 implementers]
lib/src/main/java/com/otaliastudios/transcoder/validator/Validator.java
AudioStretcher (Interface)
An AudioStretcher will change audio samples duration, in response to a {@link com.otaliastudios.transcoder.time.TimeInte [8 …
lib/src/main/java/com/otaliastudios/transcoder/stretch/AudioStretcher.java

Core symbols most depended-on inside this repo

i
called by 77
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/Logger.java
release
called by 31
lib/src/main/java/com/otaliastudios/transcoder/sink/DataSink.java
v
called by 31
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/Logger.java
get
called by 24
lib/src/main/java/com/otaliastudios/transcoder/internal/Timer.kt
w
called by 15
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/Logger.java
set
called by 14
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/TrackMap.kt
parse
called by 14
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/ISO6709LocationParser.java
getMinor
called by 13
lib/src/main/java/com/otaliastudios/transcoder/common/Size.java

Shape

Method 475
Class 126
Interface 23
Function 19
Enum 1

Languages

Java60%
Kotlin40%

Modules by API surface

lib/src/main/java/com/otaliastudios/transcoder/TranscoderOptions.java29 symbols
lib/src/main/java/com/otaliastudios/transcoder/strategy/DefaultVideoStrategy.java22 symbols
lib/src/main/java/com/otaliastudios/transcoder/source/DefaultDataSource.java18 symbols
lib/src/main/java/com/otaliastudios/transcoder/source/DataSourceWrapper.java18 symbols
lib/src/main/java/com/otaliastudios/transcoder/strategy/DefaultAudioStrategy.java16 symbols
lib/src/main/java/com/otaliastudios/transcoder/source/DataSource.java16 symbols
lib/src/main/java/com/otaliastudios/transcoder/source/BlankAudioDataSource.java16 symbols
lib/src/main/java/com/otaliastudios/transcoder/internal/utils/TrackMap.kt16 symbols
demo/src/main/java/com/otaliastudios/transcoder/demo/TranscoderActivity.java15 symbols
lib/src/main/java/com/otaliastudios/transcoder/sink/DefaultDataSink.java14 symbols
lib/src/androidTest/java/com/otaliastudios/transcoder/integration/IssuesTests.kt14 symbols
lib/src/main/java/com/otaliastudios/transcoder/internal/video/FrameDrawer.java11 symbols

For agents

$ claude mcp add Transcoder \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact