web-dev-qa-db-ja.com

Java-ffmpegラッパーを使用するか、単にJavaランタイムを使用してffmpegを実行しますか?

私はJavaにかなり慣れていないので、ビデオ変換命令をリッスンし、新しい命令が到着したらビデオを変換するプログラムを作成する必要があります(命令はAmazon SQSに保存されますが、それは私の質問とは無関係です)

私は選択肢に直面しています、Java RunTimeからexec 'ffmpeg'への変換(コマンドラインからなど)を使用するか、Javaで記述されたffmpegラッパーを使用できます http:// fmj-sf.net/ffmpeg-Java/getting_started.php

Java Runtimeを使用してffmpegを直接実行し、ライブラリを学習する必要があるためJava-ffmpegラッパーを使用することを避けます。したがって、Java-ffmpegラッパーを使用するメリットはありますか?ランタイムを使用してffmpegを直接実行しますか?ビデオを再生するためにffmpegは必要なく、ビデオを変換するだけです

ありがとう

37
Beier

間違っていなければ、リンクした「ffmpeg wrapper」プロジェクトは古く、メンテナンスされていません。 ffmpegは非常に活発なプロジェクトであり、常に多くの変更とリリースが行われています。

Xugglerプロジェクトを見る必要があります。これはJava APIを提供し、何をしたいのかを示しており、ffmpegと緊密に統合されています。

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

Runtime.exec()パスを選択した場合、このRed5スレッドは便利です。

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

35
Peter Thomas

私も、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();
21
mateuscb

多くのJava FFMPEGラッパーを提供するライブラリがあります。ただし、これらのライブラリの多くは残念ながら時代遅れで、重要なコーデック(Xuggler、humble video、JavaAV、JavaAVC、これらのプロジェクトを使用するときは注意してください!

しかし、まだ積極的に開発されFFMPEG 3をサポートするFFMPEGラッパーが1つあります-)も:

  • JavaCPP FFMPEG -完全にバンドルされたMavenアーティファクト

あるいは、 ffmpeg-cli-wrapper などのFFMPEGのコマンドラインインターフェイスのラッパーを使用できます。次に、ラッパーライブラリの新しいリリースを待たずにffmpegを手動で更新します。

9

私は自分でJava ffmpegコマンドラインラッパー: Jaffree を作成しました。これはffprobeとffmpegの両方で動作し、プログラムによるビデオの制作と消費をサポートします。便利なフルイド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();
8
Denis Kokorin

また、Xuggler 3.3では、XugglerはLGPLであり、商用ライセンスは必要ありません。

8
Art Clarke

javeを試すことができます http://www.sauronsoftware.it/projects/jave

4
sohilv

ラッパーを使用する利点は、主に、コマンドラインからアクセスできない(関連性のない)より詳細な機能を提供し、エラー処理とステータス制御を簡単にすることです-コマンドラインツールの標準を解析する必要があります出力およびエラーストリーム。

3

私はいくつかの方法を試しますが、私にとって最も簡単なのはffmpeg-cli-wrapperです。デフォルトのffmpegまたは特定のものを使用するため、スケール、ビットレートなどの多くの構成を設定できます...期間を取得してください...エラー、XUGGLE、その他

0
cyril