В моем приложении есть функция обрезки видео.
Я использую FFmpeg здесь.Ниже мой код
Объявлен сверху,
FFmpeg ffmpeg;
Загрузка библиотеки с использованием следующего кода,
try {
if (ffmpeg == null) {
Log.e("loadFFMpegBinary","null");
ffmpeg = FFmpeg.getInstance(Constants.appContext);
}
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override public void onFailure() {
Log.e("loadBinary","Failure");
}
@Override public void onSuccess() {
Log.e("onSuccess","onSuccess");
}
});
} catch (FFmpegNotSupportedException e) {
Log.e("FFmpegNot",":-"+e);
}
Обрезка с использованием следующего кода,
File externalStoragePublicDirectory = new File(destPath);
if (!externalStoragePublicDirectory.exists() ? externalStoragePublicDirectory.mkdir() : true) {
String filePrefix = yourRealPath.substring(yourRealPath.lastIndexOf("."));
String destFileName = getString(R.string.app_name) + System.currentTimeMillis();
boolean isFastMode = false;
File dest = (filePrefix.equals(".webm") || filePrefix.equals(".mkv")) ? new File(externalStoragePublicDirectory, destFileName + ".mp4") : new File(externalStoragePublicDirectory, destFileName + filePrefix);
int fileNo = 0;
while (dest.exists()) {
fileNo++;
dest = (filePrefix.equals(".webm") || filePrefix.equals(".mkv")) ? new File(externalStoragePublicDirectory, destFileName + fileNo + ".mp4") : new File(externalStoragePublicDirectory, destFileName + fileNo + filePrefix);
}
Log.e(TAG, "startTrim: src: " + yourRealPath);
Log.e(TAG, "startTrim: dest: " + dest.getAbsolutePath());
Log.e(TAG, "startTrim: startMs: " + startMs);
Log.e(TAG, "startTrim: endMs: " + endMs);
String filePath = dest.getAbsolutePath();
Log.e(TAG, "startTrim: filePath: " + filePath);
String[] complexCommand = {"-ss", "" + startMs / 1000, "-y", "-i",
yourRealPath, "-t", "" + (endMs - startMs) / 1000, "-s",
"320x240", "-r", "15", "-vcodec", "mpeg4", "-b:v", "2097152",
"-b:a", "48000", "-ac", "2", "-ar", "22050", dest.getAbsolutePath()};
try {
ffmpeg.execute(complexCommand, new ExecuteBinaryResponseHandler() {
@Override
public void onFailure(String s) {
Log.e(TAG, "FAILED with output : " + s);
}
@Override
public void onSuccess(String s) {
Log.e(TAG, "SUCCESS with output : " + s);
}
@Override
public void onProgress(String s) {
Log.e(TAG, "Started command : ffmpeg " + command);
}
@Override
public void onStart() {
Log.e(TAG, "Started command : ffmpeg " + command);
}
@Override
public void onFinish() {
Log.e(TAG, "Finished command : ffmpeg " + command);
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
Log.e("Exception",";-"+e);
}
Здесь я получаю следующую ошибку,
12-13 12: 53: 38.057 31029-31029 / com.jobsounder E / VideoCropperFragment: СБОЙ с выводом: ffmpeg версия n3.0.1 Авторское право (c) 2000-2016 разработчики FFmpeg, созданные с конфигурацией gcc 4.8 (GCC): --target-os = linux --cross-prefix = / home / vagrant / SourceCode / ffmpeg-android / toolchain-android / bin / arm-linux-androideabi- --arch = arm --cpu = cortex-a8 --enable-runtime-cpudetect --sysroot = / home / vagrant / SourceCode / ffmpeg-android / toolchain-android / sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config = / home / vagrant / SourceCode / ffmpeg-android / ffmpeg-pkg-config --prefix = / home / vagrant / SourceCode / ffmpeg-android / build / armeabi-v7a --extra-cflags = '- I / home / vagrant / SourceCode / ffmpeg-android / toolchain-android / include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE = 2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags = '- L /home / vagrant / SourceCode / ffmpeg-android / toolchain-android / lib -Wl, -z, relro -Wl, -z, теперь -pie '--extra-libs =' - lpng -lexpat -lm '--extra-cxxflags = libavutil 55. 17.103 / 55. 17.103 libavcodec 57. 24.102 / 57. 24.102 libavformat 57. 25.100 / 57. 25.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 31.100 / 6. 31.100 libswscale 4. 0.100 / 4. 0.100libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Вход # 0, mov, mp4, m4a, 3gp, 3g2, mj2, из '/storage/emulated/0/Download/VID-20181211-WA0008.mp4': Метаданные: major_brand: isom minor_version: 512 compatibility_brands: isomiso2avc1mp41 кодировщик: Lavf56.40.101 комментарий: vid: v0702afc0000beoc8l4hfpit57rr9vbg Длительность: 00: 00: 15.09, начало: 0,000000, битрейт: 1550 кбит / с Поток # 0: 0 (унция): Видео: h264 (высокий) (avc1 / 0x31637661), yuv420p, 576x1024, 1478 кбит / с, 27,43fps, 27,43 тбр, 409 тыс. тбн, 54,87 тбк (по умолчанию) Метаданные: имя-обработчика: VideoHandler Stream # 0: 1 (und): Аудио: aac (LC) (mp4a / 0x6134706D), 44100 Гц, стерео, fltp, 64 кб / с(по умолчанию) Метаданные: имя-обработчика: SoundHandler /data/app/com.jobsounder-2/lib/arm/JobSounder1544685817737.mp4: В доступе отказано 12-13 12: 53: 38.057 31029-31029 / com.jobsounderE / VideoCropperFragment: завершенная команда: ffmpeg [Ljava.lang.String; @ 11c7227b