2017-06-06 8 views
0

私はFFMPEG Metadata WrapperのようなXugglerを使用しようとしています(MP4/M4Vビデオの章のリストが必要です)。Java Xugglerメタデータ章のリストMP4/M4Vビデオ

これまでのところ解決策を見つけることができませんでした。 誰でも助けてくれますか?

私は以下の情報を得ることができました:

final String filename = "...path..."; 
    IContainer container = IContainer.make(); 
    int result = container.open(filename, IContainer.Type.READ, null); 
    if (result < 0) 
     throw new RuntimeException("Failed to open media file"); 
    int numStreams = container.getNumStreams(); 
    long duration = container.getDuration(); 
    long fileSize = container.getFileSize(); 
    long bitRate = container.getBitRate(); 
    System.out.println("Number of streams: " + numStreams); 
    System.out.println("Duration (ms): " + duration); 
    System.out.println("File Size (bytes): " + fileSize); 
    System.out.println("Bit Rate: " + bitRate); 
    for (int i = 0; i < numStreams; i++) { 
     IStream stream = container.getStream(i); 
     IStreamCoder coder = stream.getStreamCoder(); 
     System.out.println("*** Start of Stream Info ***"); 
     System.out.printf("stream %d: ", i); 
     System.out.printf("type: %s; ", coder.getCodecType()); 
     System.out.printf("codec: %s; ", coder.getCodecID()); 
     System.out.printf("duration: %s; ", stream.getDuration()); 
     System.out.printf("start time: %s; ", container.getStartTime()); 
     System.out.printf("timebase: %d/%d; ", stream.getTimeBase().getNumerator(), 
       stream.getTimeBase().getDenominator()); 
     System.out.printf("coder tb: %d/%d; ", coder.getTimeBase().getNumerator(), 
       coder.getTimeBase().getDenominator()); 
     System.out.println(); 
     if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) { 
      System.out.printf("sample rate: %d; ", coder.getSampleRate()); 
      System.out.printf("channels: %d; ", coder.getChannels()); 
      System.out.printf("format: %s", coder.getSampleFormat()); 
     } else if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) { 
      System.out.printf("width: %d; ", coder.getWidth()); 
      System.out.printf("height: %d; ", coder.getHeight()); 
      System.out.printf("format: %s; ", coder.getPixelType()); 
      System.out.printf("frame-rate: %5.2f; ", coder.getFrameRate().getDouble()); 
     } 
     System.out.println(); 
     System.out.println("*** End of Stream Info ***"); 

UPDATE 2017年7月6日 私はちょうどVLCJでそれを試してみましたが、それでも私は章のリストを取得することはできません。

File file = new File("ia_ISL_13_r720P.m4v"); 

    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "vlc64/"); 
    Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); 

    MediaPlayerFactory mpf = new MediaPlayerFactory(); 
    EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer(); 

    MediaMeta mediaMeta = mpf.getMediaMeta(file.getAbsolutePath(), true); 
    MediaMetaData asMediaMetaData = mediaMeta.asMediaMetaData(); 
    System.out.println(asMediaMetaData.getAlbum()); 
    System.out.println(asMediaMetaData.getArtist()); 
    System.out.println(asMediaMetaData.getTitle()); 

    emp.prepareMedia(file.getAbsolutePath()); 
    emp.play(); 
    emp.nextChapter(); // -> GO NEXT CHAPTER - SUCCESS 

    List<List<String>> allChapterDescriptions = emp.getAllChapterDescriptions(); 

    for (List<String> list : allChapterDescriptions) { 
     for (String string : list) { 
      System.out.println(string); 
     } 
    } 
+0

誰でもお手伝いできますか? コードにはどのような問題がありますか?例外? 質問を明確にしてください! –

+0

私は書いています:(私はMP4/M4Vビデオの章のリストが必要です)。コードにはエラーはありません。とにかく投稿を更新しました。 – MrSax

+0

UPDATE 07.06.2017 – MrSax

答えて

0

あなたはMp4Chaptersをテストしましたか? .net用ですが、オープンソースであり、多分役立ちます。

私はC#プロジェクトで使っていますが、あなたのやっていることによく似ていると思います... mp4とm4vのチャプターのリストボックスに、古いmp4とm4vのファイルシームがうまくいきます。新しいもの(2014 - >)との問題を抱えてい

using Mp4Chapters; 

// more code here... 

private void readChapters(string inputFull) 
{ 
      using (var str = File.OpenRead(this.inputFull)) 
      { 
       var extractor = new ChapterExtractor(new StreamWrapper(str)); 
       extractor.Run(); 
       // build the listbox 
       foreach (var c in extractor.Chapters ?? new ChapterInfo[0]) 
       { 
        this.lb_chapters.Items.Add(new { chapterTime = c.Time, chapterName = c.Name }); 
       } 
      } 
} 

その他のオプションは、ffmpegのを使用してビデオファイルを解析し、その結果を読むことです:

のffmpeg -i ia_ISL_13_r720P.m4v -f ffmetadata metadata.txt

私はこれが役立つことを願っています。私は知っている。 (私の主な言語ではありません、英語のため申し訳ありません)

関連する問題