2016-11-10 3 views
1

Ich möchte Chunks eines Videos jedes Stück nicht mehr als 3 Minuten mit ffmpeg machen. Ich habe über diesen Befehl von ffmpeg gelesen.Split-Video ohne zu wissen, Dateidauer

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

Ich benutze es in meinem Code wie

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()); 
      } 

Der obige Befehl funktioniert gut und das Video in 3 min spliting, aber in meinem Fall habe ich eine Datei zu lesen, damit ich genau weiß nicht, die Dauer der Datei. Muss ich über Befehl innerhalb der Schleife oder auf andere Weise laufen. Bitte helfen.

+0

Dank #aergistal, können Sie bitte den richtigen ffmpeg Befehl dafür teilen. –

Antwort

3

Die Segmentdauer beträgt genau 180s, wenn Sie alle 180s einen Keyframe haben.

Sie können -c copy nur verwenden, wenn Ihr Videoeingang bereits über Keyframes an den Teilungspunkten verfügt.

Wenn es nicht Sie müssen neu kodieren und fügen Sie sie vor der Spaltung:

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

wo:

  • -g 250 [Frames] fügt einen Keyframe alle 250 Frames (10s bei 25 fps)
  • -sc_threshold = 0 verhindert das Einfügen von Keyframes bei Szenenwechsel
  • -segment_time 180 [s] erstellt Segmente der angegebenen Dauer und muss b e ein Vielfaches des Schlüsselbildintervalls
+0

Danke #aergistal für obigen Befehl, es funktioniert gut, aber beim ersten Split-Video spielt es gut, aber zweite und andere Split-Videos kommen schwarz für einige Zeit dann spielen. –

+0

Ich weiß nicht, wie Sie die Segmente genau verwenden, aber Sie können versuchen, '-segment_format_options movflags = + faststart' hinzuzufügen – aergistal

+0

Ich möchte nur alle Teile Teile beginnt von wo seine vorherigen endet.Ich benutze wie Sie FFmpeg vorschlagen -i video.mp4 -g 250 -sc_threshold 0 -f segment -segment_time 20 -segment_format_optionen movflags = + faststart videos/chunks/segment_% 02d.mp4 –

Verwandte Themen