2013-03-27 30 views
1

我有很多視頻文件。所有類型都不同(mkv,avi,mp4,flv等)。 我想迭代這些文件並獲得電影的持續時間。Java API或用於獲取電影的持續時間的第三方

目前我使用vlcj這是好的,但代碼有點讓我困惑。 我必須先播放媒體,然後才能獲得長度。然後停止媒體。這很奇怪,不是嗎。

我能以某種方式做得更好嗎?我聽說過xuggler,但發展已經停止。 我需要一個仍然活着的API或第三方組件。我不想在播放之前播放媒體:)

+0

*「我必須先播放媒體,然後才能得到長度,然後停止媒體,這很奇怪,不是。」*不奇怪。當媒體是VBR(可變比特率)時,如果不從頭到尾地播放文件,或者至少將它構建到它可以播放的位置,通常不可能獲得長度。 – 2013-03-27 22:10:53

+0

你是對的,這是真的。但在我看來,這個過程應該遵循這一點:1.打開媒體(過程,分析等)2.電影元可用3.關閉媒體。不玩。也許我應該使用Xuggler來解決這個問題,並且不應該提供支持(http://blog.xuggle.com/2013/02/05/on-hiatus/)。 我正確嗎? – mudlee 2013-03-28 08:00:47

回答

2

最後,我已經解決了Xuggle問題。 安裝後我不得不添加這些行,並能正常工作:

IContainer container = IContainer.make(); 
    if (container.open(movie, IContainer.Type.READ, null) < 0) { 
     throw new RuntimeException("Cannot open '" + movie + "'"); 
    } 

    logger.info("# Duration (ms): " + ((container.getDuration() == Global.NO_PTS) ? "unknown" : "" + container.getDuration()/100)); 
    logger.info("# File size (bytes): " + container.getFileSize()); 
    logger.info("# Bit rate: " + container.getBitRate()); 

BTW,安裝是可怕的,但最後......得到這個代碼工作。

+0

這是可能的你分享你的項目作爲開源。或寫一些關於集成的東西。非常重要它支持多少格式? – 2014-06-10 06:53:08

+0

檢查持續時間。應該除以1000而不是100:container.getDuration()/ 1000 – 2015-07-03 16:44:52

+0

這是可能的,我只關閉了這個項目一段時間,但我必須再回去...... :)我不會在這裏如果準備好了。 – mudlee 2015-10-12 04:40:26

0
+0

JMF僅支持問題中引用的4種媒體類型中的1種。如果VLCJ或Xuggler或ffmpeg無法完成此任務,那麼JMF將無法完成此任務! – 2013-03-27 22:13:44

+0

是的,確切地說。我看到了JMF,但大家都說它不僅僅過時了。 FFmpeg也是一個不錯的選擇,我只是擔心跨平臺的事情...... VLCJ在windows和linux上有一個庫,我可以在應用程序啓動時選擇它,我想使用它。 – mudlee 2013-03-28 07:58:30