私は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は必要なく、ビデオを変換するだけです
ありがとう
間違っていなければ、リンクした「ffmpeg wrapper」プロジェクトは古く、メンテナンスされていません。 ffmpegは非常に活発なプロジェクトであり、常に多くの変更とリリースが行われています。
Xugglerプロジェクトを見る必要があります。これはJava APIを提供し、何をしたいのかを示しており、ffmpegと緊密に統合されています。
http://www.xuggle.com/xuggler/
Runtime.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();
多くのJava FFMPEGラッパーを提供するライブラリがあります。ただし、これらのライブラリの多くは残念ながら時代遅れで、重要なコーデック(Xuggler、humble video、JavaAV、JavaAVC、これらのプロジェクトを使用するときは注意してください!
しかし、まだ積極的に開発され、FFMPEG 3をサポートするFFMPEGラッパーが1つあります-)も:
あるいは、 ffmpeg-cli-wrapper などのFFMPEGのコマンドラインインターフェイスのラッパーを使用できます。次に、ラッパーライブラリの新しいリリースを待たずにffmpegを手動で更新します。
私は自分で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();
また、Xuggler 3.3では、XugglerはLGPLであり、商用ライセンスは必要ありません。
javeを試すことができます http://www.sauronsoftware.it/projects/jave
ラッパーを使用する利点は、主に、コマンドラインからアクセスできない(関連性のない)より詳細な機能を提供し、エラー処理とステータス制御を簡単にすることです-コマンドラインツールの標準を解析する必要があります出力およびエラーストリーム。
私はいくつかの方法を試しますが、私にとって最も簡単なのはffmpeg-cli-wrapperです。デフォルトのffmpegまたは特定のものを使用するため、スケール、ビットレートなどの多くの構成を設定できます...期間を取得してください...エラー、XUGGLE、その他