2016-11-10 2 views
1

Я хочу сделать куски видео каждый кусок не более 3 минут с помощью ffmpeg.I прочитал об этой команде ffmpeg.сплит видео без знания продолжительности файла

ffmpeg -i output.mp4 -ss 0 -t 180 -c copy outputVideoSegment.mp4 

Я использую его в моем коде, как

String command = "ffmpeg -i videos/testing.vob -ss 0 -t 180 -c copy outputVideoSegment.mp4"; 

      ProcessBuilder processBuilder = new ProcessBuilder("/bin/sh", "-c", command); 
      try { 
       Process process = processBuilder.start(); 
       process.waitFor(); // to wait for process builder to finish the 
            // process 
      } catch (Exception exception) { 
       log.error("Exception occured in making chunks due to " + exception.getCause()); 
      } 

Эта команда работает отлично и spliting видео в 3 мин, но в моем случае я должен прочитать файл, так что я не знаю точно продолжительность файла. Мне нужно выполнить команду выше внутри цикла или любым другим способом. Пожалуйста, помогите.

+0

Спасибо #aergistal, не могли бы вы поделиться с ним правильной командой ffmpeg. –

ответ

3

Продолжительность сегмента будет ровно 180 с, только если у вас есть ключевой кадр, присутствующий каждые 180 секунд.

Вы можете использовать -c copy, только если ваше входное видео уже имеет ключевые кадры в точках разделения.

Если это не нужно перекодировать и добавить их перед расщеплением:

ffmpeg -i <input> -g 250 -sc_threshold 0 -f segment -segment_time 180 segment_%02d.mp4 

где:

  • -g 250 [кадры] добавляет ключевой кадр каждые 250 кадров (10с при 25 кадрах в секунду)
  • -sc_threshold = 0 избегает вставку ключевых кадров на сцене-изменения
  • -segment_time 180 [с] создает отрезки заданной продолжительности и должны б e кратным интервалу ключевого кадра
+0

Спасибо #aergistal за вышеприведенную команду, его отличная работа, но при воспроизведении первого сплит-видео хорошо играет, но второй и другие сплит-видео становятся черными на несколько секунд, а затем играют. –

+0

Я не знаю, как вы используете сегменты точно, но вы можете попробовать добавить '-segment_format_options movflags = + faststart' – aergistal

+0

Я просто хочу, чтобы все мои части кусков начинались с того места, где были его предыдущие конечные точки. Я использую, как u, предлагаю ffmpeg -i video.mp4 -g 250 -sc_threshold 0 -f segment -segment_time 20 -segment_format_options movflags = + faststart videos/chunks/segment_% 02d.mp4 –

Смежные вопросы