增加两个视频合成为画中画

增加两个视频合成为画中画
pull/107/head
xufulong 6 years ago
parent 224ccd6179
commit 126d846080
  1. 2
      README.md
  2. 19
      app/src/main/java/com/frank/ffmpeg/activity/VideoHandleActivity.java
  3. 17
      app/src/main/java/com/frank/ffmpeg/util/FFmpegUtil.java
  4. 34
      app/src/main/res/layout/activity_video_handle.xml
  5. 1
      app/src/main/res/values/strings.xml

@ -15,6 +15,8 @@ android端基于FFmpeg库的使用。<br>
- #### 视频剪切
- #### 视频转码
- #### 视频截图
- #### 视频降噪
- #### 视频抽帧
- #### 视频转GIF动图
- #### 视频添加水印
- #### 视频画面拼接

@ -76,6 +76,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_reverse_video).setOnClickListener(this);
findViewById(R.id.btn_denoise_video).setOnClickListener(this);
findViewById(R.id.btn_to_image).setOnClickListener(this);
findViewById(R.id.btn_pip).setOnClickListener(this);
}
private void setVisible() {
@ -92,6 +93,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_reverse_video).setVisibility(View.VISIBLE);
findViewById(R.id.btn_denoise_video).setVisibility(View.VISIBLE);
findViewById(R.id.btn_to_image).setVisibility(View.VISIBLE);
findViewById(R.id.btn_pip).setVisibility(View.VISIBLE);
}
private void setGone() {
@ -108,6 +110,7 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
findViewById(R.id.btn_reverse_video).setVisibility(View.GONE);
findViewById(R.id.btn_denoise_video).setVisibility(View.GONE);
findViewById(R.id.btn_to_image).setVisibility(View.GONE);
findViewById(R.id.btn_pip).setVisibility(View.GONE);
}
@Override
@ -153,6 +156,9 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
case R.id.btn_to_image:
handleType = 12;
break;
case R.id.btn_pip:
handleType = 13;
break;
default:
handleType = 0;
break;
@ -291,6 +297,19 @@ public class VideoHandleActivity extends AppCompatActivity implements View.OnCli
int mFrameRate = 10;//帧率(从视频中每秒抽多少帧)
commandLine = FFmpegUtil.videoToImage(srcFile, mStartTime, mDuration, mFrameRate, imagePath);
break;
case 13://两个视频合成画中画
String inputFile1 = PATH + File.separator + "beyond.mp4";
String inputFile2 = PATH + File.separator + "small_girl.mp4";
if (!FileUtil.checkFileExist(inputFile1) && !FileUtil.checkFileExist(inputFile2)){
return;
}
//x、y坐标点需要根据全屏视频与小视频大小,进行计算
//比如:全屏视频为320x240,小视频为120x90,那么x=200 y=150
int x = 200;
int y = 150;
String picInPic = PATH + File.separator + "PicInPic.mp4";
commandLine = FFmpegUtil.picInPicVideo(inputFile1, inputFile2, x, y, picInPic);
break;
default:
break;
}

@ -299,4 +299,21 @@ public class FFmpegUtil {
return toImage.split(" ");
}
/**
* 视频叠加成画中画
* @param inputFile1 输入文件
* @param inputFile2 输入文件
* @param targetFile 输出文件
* @param x 小视频起点x坐标
* @param y 小视频起点y坐标
*
* @return 视频画中画的命令行
*/
@SuppressLint("DefaultLocale")
public static String[] picInPicVideo(String inputFile1, String inputFile2, int x, int y, String targetFile){
String reverseVideo = "ffmpeg -i %s -i %s -filter_complex overlay=%d:%d %s";
reverseVideo = String.format(reverseVideo, inputFile1, inputFile2, x, y, targetFile);
return reverseVideo.split(" ");
}
}

@ -24,21 +24,21 @@
android:id="@+id/btn_video_transform"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_transform"/>
<Button
android:id="@+id/btn_video_cut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_cut"/>
<Button
android:id="@+id/btn_video_concat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_concat"
android:visibility="gone"/>
@ -46,28 +46,28 @@
android:id="@+id/btn_screen_shot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_screen_shot"/>
<Button
android:id="@+id/btn_water_mark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_water_mark"/>
<Button
android:id="@+id/btn_generate_gif"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_to_gif"/>
<Button
android:id="@+id/btn_screen_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_screen_record"
android:visibility="gone"/>
@ -75,43 +75,51 @@
android:id="@+id/btn_combine_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_from_photo"/>
<Button
android:id="@+id/btn_play_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_play"/>
<Button
android:id="@+id/btn_multi_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_multi"/>
<Button
android:id="@+id/btn_reverse_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_reverse"/>
<Button
android:id="@+id/btn_denoise_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_denoise"/>
<Button
android:id="@+id/btn_to_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginTop="4dp"
android:text="@string/video_image"/>
<Button
android:id="@+id/btn_pip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/video_pip"/>
</LinearLayout>
</ScrollView>

@ -38,6 +38,7 @@
<string name="video_reverse">视频倒播</string>
<string name="video_denoise">视频降噪</string>
<string name="video_image">视频转图片</string>
<string name="video_pip">视频画中画</string>
<string name="swap">切换</string>
<string name="start">开始</string>

Loading…
Cancel
Save