2016-03-29 3 views
2

ce code lit la durée de temps en long, mais quand il convertit dans la date avec le format d'heure 'hh: mm: ss' il donne une valeur différente et la longueur vidéo est 00 : 08: 07. ce qui est faux dans ce codecomment obtenir durée durée de la vidéo en utilisant xuggler

String filename = "C:\\Documents\\Airtel Youthstar-Tutorial.mp4"; 
    IContainer container = IContainer.make(); 
    int result = container.open(filename, IContainer.Type.READ, null); 
    long duration = container.getDuration(); 
    System.out.println("Duration (ms): " + duration); 
+0

Quelle est la durée de la vidéo réelle et quel est le nombre long renvoyé? – Grammin

+0

long ms = 487061667; –

Répondre

1

Je suis la vidéo appropriée durée de temps en utilisant IBMPlayerForMpeg4SDK-1.0.0.jar et son travail bien moi en utilisant le code suivant

/** 
    * 
    * @param filename is the video full file path stored at any location of the system 
    * @return the value containing the time format of the video file 
    */ 
    public static String getDurationInString(String filename) 
    { 
     try { 
      // 
      long ms=getDuration(new File(filename)); 
      String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(ms), 
        TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)), 
        TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms))); 
      //System.out.println(hms); 
      return hms; 
     } catch (IOException ex) { 
      Logger.getLogger(VideoInfo.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return ""; 
    } 


    /** 
    * 
    * @param file : file that specify the file in the File location 
    * @return the duration in long 
    * @throws IOException if any exception is thrown by the system 
    */ 
    public static long getDuration(File file) throws IOException { 
     PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player(); 
     playerControl.open(file.getAbsolutePath()); 
     return playerControl.getDuration(); 
    } 
1

Si vous obtenez la durée en milliseconds

long ms = xxxxx; 

Vous pouvez le convertir au format hh:mm:ss comme ci-dessous:

String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(ms), 
     TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)), 
     TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms))); 
System.out.println(hms); 
2

En fait, votre code renvoie l'heure en microsecondes. Si vous voulez obtenir java.util.Duration, vous devez utiliser:

public static Duration getVideoDuration(String videoPath) { 
    IContainer container = IContainer.make(); 
    int result = container.open(videoPath, IContainer.Type.READ, null); 
    long durationInMicrosec = container.getDuration(); 
    long durationInNanoSec = durationInMicrosec * 1000;  
    return Duration.ofNanos(durationInNanoSec); 
} 

Et pour formatant le temps de résultat, vous pouvez utiliser le code de @SASM, et l'entrée de son code doit être

long ms = getVideoDuration("your_path_here").toMillis() 
0
//In order to import you need to get mp4parser from here: https://github.com/sannies/mp4parser 
//imports 
import com.coremedia.iso.IsoFile; 

//get the duration of video 
    private double GetVideoDuration() throws IOException { 
     double DurationVideo = 0; 
     //pathPlaying is a string this format: "src/videos/video.mp4" 
     IsoFile isoFile = new IsoFile(pathPlaying); 
     DurationVideo = (double) 
       isoFile.getMovieBox().getMovieHeaderBox().getDuration()/
       isoFile.getMovieBox().getMovieHeaderBox().getTimescale(); 
     return DurationVideo; 
    } 
+0

Bien que cet extrait de code puisse résoudre la question, [y compris une explication] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) contribue vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. – Clijsters