2016-11-10 88 views
1

我想使用ffmpeg将每个块的视频块大小不超过3分钟。我已阅读过有关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()); 
      } 

上面的命令做工精细和劈裂视频到3分,但对我来说我要读文件,所以我不知道到底文件的持续时间。我是否需要在循环内部或其他任何方式运行上面的命令。请帮助。

+0

感谢#aergistal,请分享一下适当的ffmpeg命令。 –

回答

3

只有每180s有一个关键帧时,段持续时间才会恰好为180s。

只有当您的输入视频在分割点处已经有关键帧时,才能使用-c copy

如果没有,你必须重新编码和分裂之前添加它们:

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

其中:

  • -g 250 [帧]以25 fps增加了一个关键帧,每250帧(10秒)
  • -sc_threshold = 0避免了场景变化插入关键帧
  • -segment_time 180 [秒]创建指定的持续时间的段,并且必须b e是关键帧间隔的倍数
+0

感谢#aergistal上面的命令,它的工作正常,但在播放第一个分割视频时播放得很好,但第二个和其他分割视频在黑暗中持续几个时间然后播放。 –

+0

我不知道你如何使用细分市场,但你可以尝试添加'-segment_format_options movflags = + faststart' – aergistal

+0

我只是想我所有的块部分从它以前的ends.I使用像你建议ffmpeg -i video.mp4 -g 250 -sc_threshold 0 -f segment -segment_time 20 -segment_format_options movflags = + faststart videos/chunks/segment_%02d.mp4 –