Here is how to use FFmpeg and FFprobe from the org.bytedeco.ffmpeg library.
Add the dependency for your desired operating system (see here for supported OSes):
// The main artifact
implementation("org.bytedeco:ffmpeg:6.1.1-1.5.10")
// The Jar artifact containing executables for the desired OS
implementation("org.bytedeco:ffmpeg:6.1.1-1.5.10:windows-x86_64-gpl")
// OR using Gradle version catalogs
// implementation(libs.ffmpeg)
// implementation(variantOf(libs.ffmpeg) { classifier("windows-x86_64-gpl") })
Java:
import org.bytedeco.ffmpeg.ffmpeg;
import org.bytedeco.javacpp.Loader;
// ...
public class Test {
private final String ffmpegPath = Loader.load(ffmpeg.class);
public void executeFFmpeg() throws IOException {
var ffmpegProcess = new ProcessBuilder()
.command(
ffmpegPath,
// OR any options you would pass to FFmpeg CLI
"-i", "/absolute/path/to/video.mp4"
)
.start();
try (var reader = new BufferedReader(new InputStreamReader(ffmpegProcess.getErrorStream()))) {
reader
.lines()
.forEach(System.out::println);
}
}
}
Kotlin:
import org.bytedeco.ffmpeg.ffmpeg
import org.bytedeco.javacpp.Loader
// ...
class Test() {
private val ffmpegPath = Loader.load(ffmpeg::class.java)
fun executeFFmpeg() {
ProcessBuilder()
.command(ffmpegPath, "-i", "absolute/path/to/video.mp4")
.runCatching { start() }
.onFailure { println("Starting the FFmpeg process for probing failed") }
.getOrNull()
?.errorStream
?.reader()
?.useLines { lines -> lines.forEach(::println) }
}
}