使用Java FFmpeg包装器,或者只是使用Java运行时来执行FFmpeg?

2022-08-31 19:47:47

我对Java很陌生,需要编写一个程序来收听视频转换指令,并在新指令到达时转换视频。(说明存储在 Amazon SQS 中,但与我的问题无关)

我面临着一个选择,要么使用Java运行时来执行FFmpeg转换(如从命令行),要么我可以使用用Java编写的FFmpeg包装器。

http://fmj-sf.net/ffmpeg-java/getting_started.php

我更喜欢使用Java运行时直接执行FFmpeg,并避免使用java-ffmpeg包装器,因为我必须学习库。

所以我的问题是:使用java-ffmpeg包装器而不是直接使用运行时的exec FFmpeg有什么好处吗?

我不需要FFmpeg来播放视频,只需转换视频即可。


答案 1

如果我没有记错的话,您链接到的“ffmpeg-wrapper”项目已过时且未维护。FFmpeg是一个非常活跃的项目,一直有很多变化和发布。

你应该看看Xuggler项目,它为你想要做的事情提供了一个Java API,它们与FFmpeg紧密集成。

http://www.xuggle.com/xuggler/

如果你选择走这条路,这个Red5线程应该很有用:Runtime.exec()

http://www.nabble.com/java-call-ffmpeg-ts15886850.html


答案 2

我也在寻找一些东西来包装Java中的FFMPEG。在搜索时,我发现了这个: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();

推荐