From 0b4e896f39afab51a9ba4a3d5df711fa037c1752 Mon Sep 17 00:00:00 2001 From: xufuji456 <839789740@qq.com> Date: Wed, 11 Aug 2021 23:56:49 +0800 Subject: [PATCH] Add: remove logo from video --- .../frank/ffmpeg/activity/VideoHandleActivity.kt | 14 +++++++++++--- .../java/com/frank/ffmpeg/util/FFmpegUtil.java | 12 ++++++++++++ app/src/main/res/layout/activity_video_handle.xml | 7 +++++++ app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.kt b/app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.kt index 1d6d4fa..9e5f8ea 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.kt +++ b/app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.kt @@ -120,7 +120,8 @@ class VideoHandleActivity : BaseActivity() { R.id.btn_thumbnail, R.id.btn_add_subtitle, R.id.btn_rotate, - R.id.btn_gop + R.id.btn_gop, + R.id.btn_remove_logo ) } @@ -183,12 +184,12 @@ class VideoHandleActivity : BaseActivity() { val retriever = MediaMetadataRetriever() retriever.setDataSource(srcFile) val mBitRate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE) - if (mBitRate != null && !mBitRate.isEmpty()) { + if (mBitRate != null && mBitRate.isNotEmpty()) { val probeBitrate = Integer.valueOf(mBitRate) bitRate = probeBitrate / 1000 / 100 * 100 } //1:top left 2:top right 3:bottom left 4:bottom right - val location = 2 + val location = 1 val offsetXY = 5 when (waterMarkType) { TYPE_IMAGE// image @@ -216,6 +217,13 @@ class VideoHandleActivity : BaseActivity() { } } } + R.id.btn_remove_logo//Remove logo from video: suppress logo by a simple interpolation + -> { + val removeLogoPath = PATH + File.separator + "removeLogo" + suffix + val widthL = 64 + val heightL = 40 + commandLine = FFmpegUtil.removeLogo(srcFile, 5, 5, widthL, heightL, removeLogoPath) + } R.id.btn_generate_gif//convert video into gif -> { val video2Gif = PATH + File.separator + "video2Gif.gif" diff --git a/app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java b/app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java index 71fe62b..efccb4b 100644 --- a/app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java +++ b/app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java @@ -413,6 +413,18 @@ public class FFmpegUtil { return waterMarkCmd.split(" "); } + /** + * Remove watermark from video: Suppress logo by a simple interpolation of the surrounding pixels. + * Just set a rectangle covering the logo and watch it disappear + * + * @return delogo cmd + */ + public static String[] removeLogo(String inputPath, int x, int y, int width, int height, String outputPath) { + String delogoCmd = "ffmpeg -i %s -filter_complex delogo=x=%d:y=%d:w=%d:h=%d %s"; + delogoCmd = String.format(Locale.getDefault(), delogoCmd, inputPath, x, y, width, height, outputPath); + return delogoCmd.split(" "); + } + /** * generate a palette for gif * diff --git a/app/src/main/res/layout/activity_video_handle.xml b/app/src/main/res/layout/activity_video_handle.xml index 4be7d01..abddee7 100644 --- a/app/src/main/res/layout/activity_video_handle.xml +++ b/app/src/main/res/layout/activity_video_handle.xml @@ -56,6 +56,13 @@ android:layout_marginTop="4dp" android:text="@string/video_water_mark"/> +