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"/>
+
+