Java Получение продолжительности видеофайла на ПК

Есть видео файл на ПК. Каким образом я могу получить продолжительность этого видео в Java/Kotlin?

Пытался получить через nio, но там, либо нету возможности получить этот атрибут, либо я что-то неправильно делаю.

Update: Решил данную проблему через подключение xuggle. Написал следующую функцию, чтобы получать длительность в миллисекундах:

fun getFileDuration(path: String): Long {
    val container = IContainer.make()
    container.open(path, IContainer.Type.READ, null)
    var duration =  container.duration / 1000
    container.close()
    return duration
}

Это работает, но занимает слишком много времени. 200+ файлов обрабатываются очень долго, а предусматривается обработка еще большего количества. Можно ли как-то оптимизировать скорость работы данного кода? Если нет, то что можно использовать как более быструю альтернативу? Есть ли такая возможность в JavaFX или каких-либо других библиотеках?


Ответы (1 шт):

Автор решения: Barmaley

Есть такой класс MediaMetaDataRetriever:

 MediaMetadataRetriever retriever = new MediaMetadataRetriever();
 retriever.setDataSource(context, videoUri);
 String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
 int duration = Integer.parseInt(time);
 retriever.release();

Если в видео нет метаданных (редко но такое бывает), то не сработает.

Также с помощью этого класса удобно получать thumbnail'ы видео, стоп кадры и проч. полезности.

Ссылка на документацию

→ Ссылка