используйте оболочку java-ffmpeg или просто используйте Java runtime для выполнения ffmpeg?
Я довольно новичок в Java, нужно написать программу, которая слушает инструкции по преобразованию видео и конвертирует видео после поступления новой инструкции (инструкции хранятся в Amazon SQS, но это не имеет отношения к моему вопросу)
Я стою перед выбором: либо использовать Java RunTime для преобразования exec 'ffmpeg' (например, из командной строки), либо я могу использовать обертку ffmpeg, написанную inJavahttp://fmj-sf.net/ffmpeg-java/getting_started.php
Я бы предпочел использование Java Runtime для прямого выполнения ffmpeg и избегайте использования Java-ffmpeg wrapper, поскольку мне нужно изучить библиотеку. Итак, мой вопрос: есть ли какие-либо преимущества использования Java-ffmpeg wrapper над exec ffmpeg напрямую с помощью среды выполнения? Мне не нужен ffmpeg для воспроизведения видео, просто конвертируйте видео
спасибо
8 ответов
Если я не ошибаюсь, проект "ffmpeg wrapper", с которым вы связаны, устарел и не поддерживается. ffmpeg - очень активный проект, много изменений и релизов все время.
вы должны посмотреть на проект Xuggler, это обеспечивает API Java для того, что вы хотите сделать, и они имеют тесную интеграцию с ffmpeg.
http://www.xuggle.com/xuggler/
Если вы решите спуститься во время выполнения.путь exec (), этот поток Red5 должен пригодиться:
Я тоже ищу что-то, чтобы обернуть FFMPEG в Java. Во время поиска я нашел следующее:https://github.com/bramp/ffmpeg-cli-wrapper.
на сегодняшний день он, кажется, был изменен месяц назад. Так что, надеюсь, это продержится какое-то время.
пример из их документов:
FFmpeg ffmpeg = new FFmpeg("/path/to/ffmpeg");
FFprobe ffprobe = new FFprobe("/path/to/ffprobe");
FFmpegBuilder builder = new FFmpegBuilder()
.setInput(in)
.overrideOutputFiles(true)
.addOutput("output.mp4")
.setFormat("mp4")
.setTargetSize(250000)
.disableSubtitle()
.setAudioChannels(1)
.setAudioCodec("libfdk_aac")
.setAudioRate(48000)
.setAudioBitrate(32768)
.setVideoCodec("libx264")
.setVideoFramerate(Fraction.getFraction(24, 1))
.setVideoResolution(640, 480)
.setStrict(FFmpegBuilder.Strict.EXPERIMENTAL)
.done();
FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
executor.createTwoPassJob(builder).run();
кроме того, начиная с Xuggler 3.3, Xuggler-это LGPL, что означает, что вам не нужна коммерческая лицензия.
существует множество библиотек Java, предоставляющих обертки FFMPEG. Однако большинство этих библиотек, к сожалению, устарели и используют старые версии FFMPEG, в которых отсутствуют некоторые важные кодеки (например, Xuggler, humble video, JavaAV, JavaAVC и jave). Поэтому будьте осторожны при использовании этих проектов!
однако есть одна обертка FFMPEG, которая по-прежнему активно развивается и обслуживает ffmpeg с 3 тоже:
- JavaCPP FFMPEG - с полностью упакованными артефактами maven
в качестве альтернативы вы можете использовать оболочку для интерфейса командной строки FFMPEG, например ffmpeg-cli-wrapper. Тогда это в ваших руках, чтобы обновить ffmpeg вручную, не дожидаясь нового выпуска библиотеки оболочки.
Я написал свою собственную оболочку командной строки Java ffmpeg:Jaffree. Он работает как с ffprobe, так и с ffmpeg и поддерживает программное производство и потребление видео. Также он имеет, на мой взгляд, более удобный fluid API.
вот пример использования ffprobe:
FFprobeResult result = FFprobe.atPath(BIN)
.setInputPath(VIDEO_MP4)
.setShowStreams(true)
.setShowError(true)
.execute();
if (result.getError() != null) {
//TODO handle ffprobe error message
return;
}
for (Stream stream : probe.getStreams().getStream()) {
//TODO analyze stream data
}
ProgressListener listener = new ProgressListener() {
@Override
public void onProgress(FFmpegProgress progress) {
//TODO handle progress data
}
};
и это для ffmpeg:
FFmpegResult result = FFmpeg.atPath(BIN)
.addInput(Input.fromPath(VIDEO_MP4))
.addOutput(Output.toPath(outputPath)
.addCodec(null, "copy")
)
.setProgressListener(listener)
.execute();
преимущества использования обертки в основном заключаются в том, что она предлагает больше и мелкозернистые функции, недоступные через командную строку (не относящиеся к вам), и упрощает обработку ошибок и контроль состояния-вам придется анализировать стандартные выходные данные и потоки ошибок инструмента командной строки.
Я пробую несколько способов, Самый простой для меня-ffmpeg-cli-wrapper, потому что он использует ffmpeg по умолчанию или конкретный, кроме того, вы можете настроить много конфигурации, такой как масштаб, битрейт... получить продолжительность... JAVE от sauronsoftware делает много ошибок, XUGGLE и другие, я нашел это слишком сложным