This is an Android library which can be used to apply different Filters/Effects on videos. It uses vertexShaders and fragmentShaders to apply effects on GLSurfaceView
. It uses MediaPlayer
instance for playing videos on GlSurfaceView
. See the sample app in order to see a working demo.
The following list of effects are currently avaialble and can be applied using VidEffects
- AutoFix Effect
- Black and White Effect
- Brightness Effect
- Contrast Effect
- CrossProcess Effect
- Documentary Effect
- Duotone Effect
- FillLight Effect
- Grain Effect
- Greyscale Effect
- Lamoish Effect
- InvertColors Effect
- Posterize Effect
- Saturation Effect
- Sepia Effect
- Sharpness Effect
- Temperature Effect
- Tint Effect
- Vignette Effect
- Hue Effect
- Gamma Effect
The effects applied using this library are temporary. What that means is that the orignal video doesn't change. Effects are only applied during video playback and once the video ends the effects end with it. In the future, i am aiming to apply permanant effect to videos. You guys are welcome to help out using PRs.
For now, if you are really desperate and want to apply effects then you can use FFmpeg to apply effects on videos. Details about how to do that can be seen on this wiki page
- Add the following code to your project's
build.gradle
file
repositories {
jcenter()
}
- Add the following gradle path to your
app/build.gradle
file
dependencies {
// Gradle path for VidEffects
compile 'com.sherazkhilji.videffects:videffects:1.0.2'
}
- Then you need to add
VideoSurfaceView
either usingjava code
or asxml
in yourlayout
file.
<com.sherazkhilji.videffect.view.VideoSurfaceView
android:id="@+id/mVideoSurfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- Then you need to reference the
VideoSurfaceView
and call itsinit()
method in yourActivity
orFragment
onCreate()
supplying it with aMediaPlayer
instance and aVideo Effect
. Also you would need to callVideoSurfaceView
onResume()
in yourActivity
orFragment
onResume()
so that your video is rendered properly.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mResources = getResources();
mMediaPlayer = new MediaPlayer();
try {
// Load video file from SD Card
// File dir = Environment
// .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
// File file = new File(dir,
// "sample.mp4");
// mMediaPlayer.setDataSource(file.getAbsolutePath());
// -----------------------------------------------------------------------
// Load video file from Assets directory
AssetFileDescriptor afd = getAssets().openFd("sample.mp4");
mMediaPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
// Initialize VideoSurfaceView using code
// mVideoView = new VideoSurfaceView(this);
// setContentView(mVideoView);
// or
mVideoView = (VideoSurfaceView) findViewById(R.id.mVideoSurfaceView);
mVideoView.init(mMediaPlayer,
new DuotoneEffect(Color.YELLOW, Color.RED));
setContentView(R.layout.activity_sampleplayer);
}
@Override
protected void onResume() {
super.onResume();
mVideoView.onResume();
}
- Incase of any confusion, checkout the SamplePlayerActivity for a complete example on how to apply different
Effects
on your videos.
- This blog post by Ashraff Hathibelagal for easing the process of learning Opengl and explaining how to apply effects on images.
- GrepCode For providing me with Android source code which were helpful in writing video effects/filters.
- MediaPlayerSurface by crossle It helped me in playing video using a GlsurfaceView.
- Fadden who is the writer of grafika for pointing me towards right direction on how to apply effects on a video.
- Intel INDE Media for Mobile Tutorials for the sample app and helping me getting familiar with how fragmentShaders work.
- Umair Shafique for authoring How to apply permanent effect using FFmpeg wiki page
Want to contribute or add some new Effects? Great! Fork it and send me a pull request or contact me on the email below, if you want to become a permanant contributor.
- Sheraz Ahmad Khilji - [email protected]
Copyright 2016 Sheraz Ahmad Khilji
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.