Я пытаюсь отредактировать некоторые видео в своем приложении для Android с помощью FFmpeg, но я столкнулся с некоторыми проблемами, когда пытался воспроизвести только часть видео.Android ffmpeg video cut
I'm с помощью этого FFmpeg компиляции/LIB https://github.com/WritingMinds/ffmpeg-android-java
Я пытался использовать эту команду, чтобы обрезать/вырезать видео
"-y -i input.mp4 -ss 00:00:01.00 -t 00:00:15.000 -c copy output.mp4"
Но с некоторым видео I'm получает черный экран или видео просто зависает. Звук прекрасно работает во всех моих тестах.
С помощью этой команды
"-y -i input.mp4 -ss 00:00:01.000 -t 00:00:15.000 -async 1 output.mp4"
Все отлично работает во всех моих тестах (видео/звук), но занимает слишком много времени, чтобы сгенерировать выходной файл, этот файл 15s занимает более 2 минут, чтобы быть сгенерированы.
Я пробовал другие варианты этих команд, но у меня всегда возникают проблемы с видеопотоком (с черным экраном или замерзанием) или занимает слишком много времени для генерации вывода (пользователь может выбрать только 15 секунд видео для отправки мой сервер)
Спасибо!
EDIT:
это часть кода, обрезки видео
String[] cmd = new String[]{"-y","-i",input,"-ss","00:00:05.000","-vcodec","copy",
"-acodec","copy","-t","00:00:15.00","-strict","-2",output };
final FFmpeg ffmpeg = FFmpeg.getInstance(this);
try {
ffmpeg.execute(cmd, new FFmpegExecuteResponseHandler() {
@Override
public void onSuccess(String message) {
Log.i("VideoEditActivity", "Success " + message);
is_video_generated_ = true;
}
@Override
public void onProgress(String message) {
Log.i("VideoEditActivity", "Progress updated " + message);
}
@Override
public void onFailure(String message) {
Log.e("VideoEditActivity", "ERROR! " + message);
}
@Override
public void onStart() {
progress_dialog_.setMessage(getString(R.string.str_video_generating));
progress_dialog_.show();
}
@Override
public void onFinish() {
Log.i("VideoEditActivity", "Finished");
progress_dialog_.hide();
Intent intent = new Intent(getApplicationContext(), VideoPlayActivity.class);
intent.putExtra("media", edited_video_path_);
startActivity(intent);
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
e.printStackTrace();
}
Это исходный файл: [https://drive.google.com/file/d/0BzqJL_nNetbRYmxvcTljanJwR00/view?usp=sharing][1]
И этот вывод: 0BzqJL_nNetbReENjRGMtVXQ5VHM/зрения? usp = sharing (переполнение стека не позволяет мне добавить более 2 ссылок)
При копировании видео можно только обрезать в ключевых кадрах. Итак, если ваш '-ss' равен' 12', а ключевой кадр - '10', то выходное видео будет заморожено/черным до появления следующего ключевого кадра. – Mulvya
ОК, изменение порядка -ss будет исправлять начало видеофрагмента (https://trac.ffmpeg.org/wiki/Seeking), но есть простой способ обрезать конец видео в ключевом кадре (даже что видео будет немного больше, чем мне нужно)? Я немного читал об этом, и некоторые ребята используют ffprobe для получения метки ключевых кадров, но сегодня у меня ее нет в моей сборке Android. – Raupp