SoFunction
Updated on 2025-05-18

A complete guide to implementing video format conversion in Java

Core idea

  • Using open source toolsFFmpeg, this is the most powerful multimedia processing library currently, supporting conversion of multiple audio and video formats.
  • Java passProcessBuilderor third-party library (such asXuggleorJaffree) interacts with FFmpeg to realize video format conversion.

Method 1: By calling the FFmpeg command

step

  1. Install FFmpeg

    • Download and installFFmpeg
    • Configure environment variables to ensureffmpegThe command can be run directly in the terminal.
  2. Writing Java code
    useProcessBuilderCall the FFmpeg command to perform video format conversion.

Sample code

import ;
import ;
import ;

public class VideoFormatConverter {

    public static void convertVideo(String inputPath, String outputPath, String format) throws IOException, InterruptedException {
        // Build the FFmpeg command        String command = ("ffmpeg -i %s -c:v libx264 -c:a aac %s.%s", inputPath, outputPath, format);

        // Use ProcessBuilder to execute commands        ProcessBuilder processBuilder = new ProcessBuilder((" "));
        (true);
        Process process = ();

        // Get the output information of FFmpeg        BufferedReader reader = new BufferedReader(new InputStreamReader(()));
        String line;
        while ((line = ()) != null) {
            (line);
        }

        // Wait for the process to end        int exitCode = ();
        if (exitCode == 0) {
            ("Video conversion was successful!");
        } else {
            ("Video conversion failed!");
        }
    }

    public static void main(String[] args) {
        try {
            String inputPath = "input.mp4";  // Enter the video file path            String outputPath = "output";    // Output video file path (excluding extension)            String format = "avi";          // Target video format            convertVideo(inputPath, outputPath, format);
        } catch (IOException | InterruptedException e) {
            ();
        }
    }
}

illustrate

  • inputPath: Enter the video file path.
  • outputPath: The converted video file path (the extension is determined by the target format).
  • format: Target format, e.g.avimp4mkv

advantage

  • Simple and efficient, FFmpeg supports a wide range of formats.
  • High flexibility, you can adjust commands according to your needs (such as setting resolution, bit rate, etc.).

Method 2: Use Jaffree (FFmpeg's Java encapsulation library)

JaffreeIt is a Java library based on FFmpeg, which provides a higher level of encapsulation for easy call by developers.

Dependency introduction

Introduced in the Maven projectJaffree

<dependency>
    <groupId></groupId>
    <artifactId>jaffree</artifactId>
    <version>2023.01.01</version>
</dependency>

Sample code

import ;
import ;

import ;
import ;

public class JaffreeVideoConverter {

    public static void main(String[] args) {
        // Input and output file paths        Path input = ("input.mp4");
        Path output = ("");

        // Call FFmpeg for video format conversion        FFmpegResult result = ()
                .addInput(())
                .addOutput(())
                .execute();

        ("Video format conversion is complete!");
    }
}

illustrate

  • (): Automatically detect FFmpeg executable files in the environment.
  • .addInput(): Specify the input file.
  • .addOutput(): Specify the output file and format.
  • .execute(): Perform a format conversion operation.

advantage

  • There is no need to call the command line directly, pure Java code is more readable and maintained.
  • Provide higher-level packaging to reduce the workload of developers.

Method 3: Use Xuggle

XuggleIt is a powerful Java multimedia processing library that can directly operate audio and video files. Although powerful, the development and support of the library have been stopped, so be cautious when using it.

Dependency introduction

Since Xuggle is no longer maintained, you canThird-party warehouseDownload or integrate the JAR package into your project.

Sample code

Here is a simple code example for bringing videos from.mp4Convert to.aviFormat:

import ;
import ;
import ;

public class XuggleVideoConverter {

    public static void main(String[] args) {
        String inputFile = "input.mp4";
        String outputFile = "";

        // Create media readers and writers        IMediaReader reader = (inputFile);
        IMediaWriter writer = (outputFile, reader);

        // Associate the reader with the writer        (writer);

        // Start processing        while (() == null) {
            // Continuously read packets        }

        ("Video conversion is complete!");
    }
}

advantage

  • Pure Java library, no need to install FFmpeg.
  • Ability to deeply customize audio and video processing logic.

shortcoming

  • Xuggle is no longer maintained and there may be compatibility or performance issues.

Method 4: Video processing based on JCodec

JCodecIt is a pure Java implementation video encoding library, but currently supports limited formats (such as MP4).

Dependency introduction

<dependency>
    <groupId></groupId>
    <artifactId>jcodec</artifactId>
    <version>0.2.5</version>
</dependency>

Sample code

Will.mp4Convert to.aviExample:

import ;
import ;
import ;

import ;

public class JCodecConverter {

    public static void main(String[] args) throws Exception {
        File output = new File("");

        SequenceEncoder encoder = new SequenceEncoder((output));
        Picture picture;

        // Assume that the video frame has been read (the logic of the decoder reading video frames is required)        while ((picture = getNextPicture()) != null) {
            (picture);
        }

        ();
        ("Video format conversion is complete!");
    }

    private static Picture getNextPicture() {
        // Implement decoder logic and return to the next frame        return null;
    }
}

advantage

  • Pure Java implementation, no need to rely on external tools.

shortcoming

  • The format support is limited and is not suitable for complex format conversion.

Recommended plan

  • Using FFmpegIt is the best choice, cooperateProcessBuilderorJaffree, can efficiently complete various video format conversion.
  • If you have requirements for pure Java implementation, you can considerJCodecorXuggle, but it needs to be paid attention to its functional limitations.

Summarize

Implementing video format conversion in Java requires external tools or libraries to complete. For most scenarios, calling FFmpeg's command directly or using encapsulated libraries such as Jaffree is the most practical solution. Choose the right implementation method according to your specific needs and project requirements.

The above is the detailed content of the complete guide to implementing video format conversion in Java. For more information about Java video format conversion, please pay attention to my other related articles!