2016-10-19 2 views
1

Я пытаюсь отредактировать некоторые видео в своем приложении для 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 ссылок)

+0

При копировании видео можно только обрезать в ключевых кадрах. Итак, если ваш '-ss' равен' 12', а ключевой кадр - '10', то выходное видео будет заморожено/черным до появления следующего ключевого кадра. – Mulvya

+0

ОК, изменение порядка -ss будет исправлять начало видеофрагмента (https://trac.ffmpeg.org/wiki/Seeking), но есть простой способ обрезать конец видео в ключевом кадре (даже что видео будет немного больше, чем мне нужно)? Я немного читал об этом, и некоторые ребята используют ffprobe для получения метки ключевых кадров, но сегодня у меня ее нет в моей сборке Android. – Raupp

ответ

0

попытка:

-y -i -ss 00: 00: 00,00 input_path -vcodec копия -acodec копии -t 00: 00: 00,00 -strict -2 OUTPUT_PATH

-ss является время_запуском и -t длительности. HH: MM: SS.SS

его быстрый как ад. делает обрезку без повторного кодирования

+0

Я пробовал этот и работал немного лучше, но у меня все еще есть проблемы с некоторыми видео, изучая немного больше, я понял, что почти все файлы, которые у меня были с этой проблемой, - это видео, обработанные WhatsAPP и не записанные пользователем, делают у вас есть идея, почему это происходит? – Raupp

+0

Вы можете указать код? вы должны строго следовать указанному выше порядку командной строки. Кстати, в каком формате есть видео? –

+0

Я редактировал свой вопрос с помощью кода sorce и команд, я добавил ссылки на оригинал и для выходных файлов. Благодарю вас за помощь! – Raupp