implementation("com.arthenica:mobile-ffmpeg-full:4.4")
1.ffmpeg视频抽帧
/**
* ffmpeg -i "123.mp4" -r 5 -q:v 2 -f image2 %d.jpeg
* <p>
* 备注:
* -i 是用来获取输入文件的名称,-i “123.mp4” 就是获取这个叫做123的mp4视频文件,当然你用avi格式之类的也可以;
* -r 是设置每秒提取图片的帧数,也即采样率,-r 5的意思就是每秒抽取5张视频帧;
* -q:v 2 这个可以提高抽取到的图片的质量的;
* -f 是设定输出格式,这里image2就是图像解析模式,还有contact连接模式等;
* %d.jpeg,可以指定文件的输出名字jpeg,jpg,png之类的都可以,也可以在前面加个路径,变成 /data/mp4-%05d.jpeg
*
* @param path
*/
private void startShootVideoThumb(String path) {
String dicName = DIR_IMAGE_ANALYSIS + new Date().getTime();
FileUtil.getInstance().initDirectory(dicName);
String ffmpegCmd = "-i " + path + " -r 1 -f image2 " + dicName + "/frame%04d.png";
String[] command = ffmpegCmd.split(" ");
System.out.println(Arrays.toString(command));
FFmpeg.executeAsync(command, (executionId, returnCode) -> {
LogUtil.e("文件解码=" + (returnCode == 0));
File[] files = FileUtil.getInstance().getFiles(dicName);
LogUtil.e("文件解码=" + files.length);
});
}
2.ffmpeg视频长度裁剪
/**
* @param start 裁剪开始时间
* @param duration 裁剪长度
*/
@UnstableApi
private void cutVideoLong(double start, double duration) {
LogUtil.e("视频长度裁剪");
String out = StorageUtil.getCacheDir() + File.separator + "editVideo.mp4";