增加视频降噪

pull/107/head
xufulong 7 years ago
parent 5fb8df32a7
commit d6912e7155
  1. 35
      app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.java
  2. 13
      app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java
  3. 9
      app/src/main/res/layout/activity_video_handle.xml
  4. 1
      app/src/main/res/values/strings.xml

@ -10,13 +10,11 @@ import android.support.v7.app.AppCompatActivity;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import com.frank.ffmpeg.FFmpegCmd; import com.frank.ffmpeg.FFmpegCmd;
import com.frank.ffmpeg.R; import com.frank.ffmpeg.R;
import com.frank.ffmpeg.format.VideoLayout; import com.frank.ffmpeg.format.VideoLayout;
import com.frank.ffmpeg.util.FFmpegUtil; import com.frank.ffmpeg.util.FFmpegUtil;
import com.frank.ffmpeg.util.FileUtil; import com.frank.ffmpeg.util.FileUtil;
import java.io.File; import java.io.File;
public class VideoHandleActivity extends AppCompatActivity implements View.OnClickListener{ public class VideoHandleActivity extends AppCompatActivity implements View.OnClickListener{
@ -71,6 +69,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_play_video).setOnClickListener(this); findViewById(R.id.btn_play_video).setOnClickListener(this);
findViewById(R.id.btn_multi_video).setOnClickListener(this); findViewById(R.id.btn_multi_video).setOnClickListener(this);
findViewById(R.id.btn_reverse_video).setOnClickListener(this); findViewById(R.id.btn_reverse_video).setOnClickListener(this);
findViewById(R.id.btn_denoise_video).setOnClickListener(this);
} }
private void setVisible() { private void setVisible() {
@ -85,6 +84,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_play_video).setVisibility(View.VISIBLE); findViewById(R.id.btn_play_video).setVisibility(View.VISIBLE);
findViewById(R.id.btn_multi_video).setVisibility(View.VISIBLE); findViewById(R.id.btn_multi_video).setVisibility(View.VISIBLE);
findViewById(R.id.btn_reverse_video).setVisibility(View.VISIBLE); findViewById(R.id.btn_reverse_video).setVisibility(View.VISIBLE);
findViewById(R.id.btn_denoise_video).setVisibility(View.VISIBLE);
} }
private void setGone() { private void setGone() {
@ -99,6 +99,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_play_video).setVisibility(View.GONE); findViewById(R.id.btn_play_video).setVisibility(View.GONE);
findViewById(R.id.btn_multi_video).setVisibility(View.GONE); findViewById(R.id.btn_multi_video).setVisibility(View.GONE);
findViewById(R.id.btn_reverse_video).setVisibility(View.GONE); findViewById(R.id.btn_reverse_video).setVisibility(View.GONE);
findViewById(R.id.btn_denoise_video).setVisibility(View.GONE);
} }
@Override @Override
@ -138,6 +139,9 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
case R.id.btn_reverse_video: case R.id.btn_reverse_video:
handleType = 10; handleType = 10;
break; break;
case R.id.btn_denoise_video:
handleType = 11;
break;
default: default:
handleType = 0; handleType = 0;
break; break;
@ -151,9 +155,6 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
*/ */
private void doHandleVideo(int handleType){ private void doHandleVideo(int handleType){
String[] commandLine = null; String[] commandLine = null;
if (!FileUtil.checkFileExist(srcFile) || !FileUtil.checkFileExist(appendVideo)){
return;
}
switch (handleType){ switch (handleType){
case 0://视频转码:mp4转flv、wmv, 或者flv、wmv转Mp4 case 0://视频转码:mp4转flv、wmv, 或者flv、wmv转Mp4
if (!FileUtil.checkFileExist(srcFile)){ if (!FileUtil.checkFileExist(srcFile)){
@ -207,12 +208,12 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
String photoMark = PATH + File.separator + "photoMark.mp4"; String photoMark = PATH + File.separator + "photoMark.mp4";
commandLine = FFmpegUtil.addWaterMark(appendVideo, photo, photoMark); commandLine = FFmpegUtil.addWaterMark(appendVideo, photo, photoMark);
//2、文字 //2、文字
//String text = "Hello,FFmpeg"; // String text = "Hello,FFmpeg";
//String textPath = PATH + File.separator + "text.jpg"; // String textPath = PATH + File.separator + "text.jpg";
//boolean result = BitmapUtil.textToPicture(textPath, text, this); // boolean result = BitmapUtil.textToPicture(textPath, text, this);
//Log.i(TAG, "text to pitcture result=" + result); // Log.i(TAG, "text to pitcture result=" + result);
//String textMark = PATH + File.separator + "textMark.mp4"; // String textMark = PATH + File.separator + "textMark.mp4";
//commandLine = FFmpegUtil.addWaterMark(appendVideo, photo, textMark); // commandLine = FFmpegUtil.addWaterMark(appendVideo, textPath, textMark);
break; break;
case 5://视频转成gif case 5://视频转成gif
if (!FileUtil.checkFileExist(srcFile)){ if (!FileUtil.checkFileExist(srcFile)){
@ -251,12 +252,18 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
commandLine = FFmpegUtil.multiVideo(input1, input2, outputFile, VideoLayout.LAYOUT_HORIZONTAL); commandLine = FFmpegUtil.multiVideo(input1, input2, outputFile, VideoLayout.LAYOUT_HORIZONTAL);
break; break;
case 10://视频反序倒播 case 10://视频反序倒播
String input = PATH + File.separator + "beyond.mp4";
String output = PATH + File.separator + "reverse.mp4"; String output = PATH + File.separator + "reverse.mp4";
if (!FileUtil.checkFileExist(input) || !FileUtil.checkFileExist(output)){ if (!FileUtil.checkFileExist(srcFile)){
return;
}
commandLine = FFmpegUtil.reverseVideo(srcFile, output);
break;
case 11://视频降噪
String denoise = PATH + File.separator + "denoise.mp4";
if (!FileUtil.checkFileExist(srcFile)){
return; return;
} }
commandLine = FFmpegUtil.reverseVideo(input, output); commandLine = FFmpegUtil.denoiseVideo(srcFile, denoise);
break; break;
default: default:
break; break;

@ -264,4 +264,17 @@ public class FFmpegUtil {
return reverseVideo.split(" "); return reverseVideo.split(" ");
} }
/**
* 视频降噪
* @param inputFile 输入文件
* @param targetFile 输出文件
*
* @return 视频降噪的命令行
*/
public static String[] denoiseVideo(String inputFile, String targetFile){
String reverseVideo = "ffmpeg -i %s -nr 500 %s";
reverseVideo = String.format(reverseVideo, inputFile, targetFile);
return reverseVideo.split(" ");
}
} }

@ -112,4 +112,13 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="@string/video_reverse"/> android:text="@string/video_reverse"/>
<Button
android:id="@+id/btn_denoise_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/btn_reverse_video"
android:layout_marginTop="10dp"
android:text="@string/video_denoise"/>
</RelativeLayout> </RelativeLayout>

@ -36,6 +36,7 @@
<string name="video_fast">快进</string> <string name="video_fast">快进</string>
<string name="video_multi">画面拼接</string> <string name="video_multi">画面拼接</string>
<string name="video_reverse">视频倒播</string> <string name="video_reverse">视频倒播</string>
<string name="video_denoise">视频降噪</string>
<string name="swap">切换</string> <string name="swap">切换</string>
<string name="start">开始</string> <string name="start">开始</string>

Loading…
Cancel
Save