Вам нужна библиотека, которая может читать файл и указывать длину. Например, используя Caprica's VLCJ, который обертывает VLC, как только вы укажете MediaPlayer
на свой файл, вы можете запросить его для its length in seconds. Я не уверен, будет ли это работать без интерфейса.
Другой вариант: Xuggler, который обертывает FFMPEG. Там, вы можете написать следующее, чтобы открыть файл и попросить его продолжительность:
IMediaReader reader = ToolFactory.makeReader(filename);
IContainer container = reader.getContainer();
if (container.queryStreamMetaData() >= 0) {
long duration = container.getDuration(); // <-- got it
}
Обратите внимание, что есть много изменчивости в том, что вы можете ожидать от файла .mp4 (mp4 is a container, а не кодировка) - поэтому будьте осторожны с неправильными или неподдерживаемыми вариантами.
Оба VLCJ и Xuggler являются GPLv3; вам может понадобиться изолировать вашу программу от них как плагинов, если ваш код также не будет GPL'd, в зависимости от того, как вы интерпретируете java-ссылку.
Другой вариант - вызвать системный скрипт, который предоставит вам номер. Это избавляет от интеграции с Java, но заставляет вас обновлять сценарий и иметь доступ к своей системе. Для Ubuntu Linux, они могут работать:
ffprobe file.mp4 -show_format_entry duration
или
avprobe file.mp4 -show_format_entry duration
или
$ mediainfo --Inform="Video;%Duration%" [inputfile]
все они нашли в this answer
Я думаю, что [это] (HTTP: // stackoverflow.com/a/3048229/1678362) может ответить на ваш вопрос, хотя речь идет об аудиопотоках. – Aaron