{"id":49223224,"url":"https://github.com/createchance/simplevideoeditor","last_synced_at":"2026-04-24T05:04:08.318Z","repository":{"id":41274893,"uuid":"135989547","full_name":"CreateChance/SimpleVideoEditor","owner":"CreateChance","description":"Video editor library for android, implemented with android media framework and opengl es 2.0.","archived":false,"fork":false,"pushed_at":"2018-08-28T11:18:26.000Z","size":1636,"stargazers_count":37,"open_issues_count":0,"forks_count":16,"subscribers_count":5,"default_branch":"master","last_synced_at":"2023-02-27T07:07:49.098Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CreateChance.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-04T07:47:55.000Z","updated_at":"2023-01-19T01:29:57.000Z","dependencies_parsed_at":"2022-09-21T00:00:26.168Z","dependency_job_id":null,"html_url":"https://github.com/CreateChance/SimpleVideoEditor","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/CreateChance/SimpleVideoEditor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreateChance%2FSimpleVideoEditor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreateChance%2FSimpleVideoEditor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreateChance%2FSimpleVideoEditor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreateChance%2FSimpleVideoEditor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CreateChance","download_url":"https://codeload.github.com/CreateChance/SimpleVideoEditor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreateChance%2FSimpleVideoEditor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32209897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-24T05:03:58.486Z","updated_at":"2026-04-24T05:04:08.308Z","avatar_url":"https://github.com/CreateChance.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"logo/1.png\" alt=\"SimpleVideoEditor\" height=\"210px\"\u003e\u003c/p\u003e\n\n# SimpleVideoEditor\nVideo editor library for android, implemented with android media framework and opengl es 2.0.\n\nThe aim of this library is:\n1. tiny size(no ffmpeg, 103KB for now)\n2. simple api\n3. powerful feature\n# *NOTE*\nThis library is still under development, apis will be changed.\n\nAny suggestion is welcome, you can raise issues or pull requests, thx.\n# How to use\n## Init\n```java\n// init with context, you can do this in application or activity.\nVideoEditorManager.getManager().init(context);\n```\n## Define progress listeners:\n```java\n// EditStageListener use to listener every stage progresss.\nprivate EditStageListener mStageListener = new EditStageListener() {\n    @Override\n    public void onStart(String action) {\n        super.onStart(action);\n        Log.d(TAG, \"EditStageListener, onStart: \" + action);\n        mActionView.setText(action + \": started\");\n    }\n\n    @Override\n    public void onProgress(String action, float progress) {\n        super.onProgress(action, progress);\n        Log.d(TAG, \"EditStageListener, onProgress: \" + action + \", progress: \" + progress);\n        mActionView.setText(action + \": progress\");\n        mProgressView.setText(String.format(\"%.2f%%\", progress * 100));\n    }\n\n    @Override\n    public void onSucceeded(String action) {\n        super.onSucceeded(action);\n        Log.d(TAG, \"EditStageListener, onSucceeded: \" + action);\n        mActionView.setText(action + \": succeed\");\n        if (Constants.ACTION_MERGE_VIDEOS.equals(action)) {\n            mToken = -1;\n        }\n    }\n\n    @Override\n    public void onFailed(String action) {\n        super.onFailed(action);\n        Log.d(TAG, \"EditStageListener, onFailed: \" + action);\n        mActionView.setText(action + \": failed\");\n    }\n};\n// EditListener use to listen overall progress.\nprivate EditListener mEditListener = new EditListener() {\n    @Override\n    public void onStart(long token) {\n        super.onStart(token);\n        Log.d(TAG, \"EditListener, onStart token: \" + token);\n    }\n\n    @Override\n    public void onProgress(long token, float progress) {\n        super.onProgress(token, progress);\n        Log.d(TAG, \"EditListener, onProgress: \" + progress + \", token: \" + token);\n    }\n\n    @Override\n    public void onSucceeded(long token, File outputFile) {\n        super.onSucceeded(token, outputFile);\n        Log.d(TAG, \"EditListener, onSucceeded token: \" + token + \", output: \" + outputFile);\n        mToken = -1;\n    }\n\n    @Override\n    public void onFailed(long token) {\n        super.onFailed(token);\n        Log.d(TAG, \"EditListener, onFailed token: \" + token);\n        mToken = -1;\n    }\n};\n```\n## Define actions\n```java\n// video water mark config\nWaterMarkFilter waterMarkFilter = new WaterMarkFilter.Builder()\n        .watermark(BitmapFactory.decodeResource(getResources(), R.drawable.watermark))\n        .position(100, 200)\n        .scaleFactor(1f)\n        .startFrom(5 * 1000)\n        .duration(5 * 1000)\n        .build();\n// video filter config.\nVideoFrameLookupFilter lookupFilter = new VideoFrameLookupFilter.Builder()\n        .curve(BitmapFactory.decodeResource(getResources(), R.drawable.filter9))\n        .strength(1f)\n        .startFrom(5 * 1000)\n        .duration(5 * 1000)\n        .build();\n// filter action with water mark and filter config.\nVideoFilterAddAction filterAddAction = new VideoFilterAddAction.Builder()\n        .watermarkFilter(waterMarkFilter)\n        .frameFilter(lookupFilter)\n        .build();\n\n// bgm add action\nVideoBgmAddAction bgmAddAction = new VideoBgmAddAction.Builder()\n        .bgmFile(new File(Environment.getExternalStorageDirectory(), \"videoeditor/music.mp3\"))\n        .videoFrom(5 * 1000)\n        .videoDuration(7 * 1000)\n        .override(true)\n        .bgmFrom(5 * 1000)\n        .build();\n\n// bgm remove action\nVideoBgmRemoveAction bgmRemoveAction = new VideoBgmRemoveAction.Builder()\n        .from(3 * 1000)\n        .duration(8 * 1000)\n        .build();\n\n// cut action\nVideoCutAction cutAction = new VideoCutAction.Builder()\n        .from(5 * 1000)\n        .duration(10 * 1000)\n        .build();\n\n// merge action\nVideoMergeAction mergeAction = new VideoMergeAction.Builder()\n        .merge(new File(Environment.getExternalStorageDirectory(), \"videoeditor/input.mp4\"))\n        // put input file here.\n        .inputHere()\n        .merge(new File(Environment.getExternalStorageDirectory(), \"videoeditor/input2.mp4\"))\n        .merge(new File(Environment.getExternalStorageDirectory(), \"videoeditor/input3.mp4\"))\n        .merge(new File(Environment.getExternalStorageDirectory(), \"videoeditor/input4.mp4\"))\n        .build();\n\n// start it! token is the unique id of this task.\nmToken = VideoEditorManager.getManager()\n        // give the input file.\n        .edit(new File(Environment.getExternalStorageDirectory(), \"videoeditor/input.mp4\"))\n        // all actions here will be executed in define order.\n        .withAction(cutAction)\n        .withAction(bgmAddAction)\n        .withAction(filterAddAction)\n        .withAction(bgmRemoveAction)\n        .withAction(mergeAction)\n        // give the output file.\n        .saveAs(new File(Environment.getExternalStorageDirectory(), \"videoeditor/output.mp4\"))\n        // commit action list, and actions will be executed right now.\n        .commit(mEditListener, mStageListener);\n```\n## Cancel task\n```java\n// cancel task with token.\nVideoEditorManager.cancel(mToken);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreatechance%2Fsimplevideoeditor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreatechance%2Fsimplevideoeditor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreatechance%2Fsimplevideoeditor/lists"}